#1 Le 18/03/2021, à 15:42
- boubchat
Script qui ne se lance pas à l'extinction du PC
Bonjour à tous!
Plusieurs jours de suite que je galère à mettre en place un script qui se lancerait à la fermeture d'Ubuntu (V 18.04).
J'ai le script suivant: ./rc5.d/S01MailSyncDemarrer.sh
#!/bin/sh
### BEGIN INIT INFO
# Provides: MailSyncExtinction.sh
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start:
# Default-Stop: 0 6
# X-Interactive: true
# Short-Description: Set console font and keymap
### END INIT INFO
touch /home/cha/auRevoir.txt
Je l'ai enregistré sous etc/init.d (MailSyncExtinction.sh), puis :
sudo chmod +x MailSyncExtinction.sh
sudo chmod 755 MailSyncExtinction.sh
sudo update-rc.d MailSyncExtinction.sh defaults
J'ai ensuite verifié qu'il était bien dans les bons dossiers:
cd..
sudo find -iname '*MailSync*'
./rc0.d/K01MailSyncExtinction.sh
./init.d/MailSyncExtinction.sh
./rc6.d/K01MailSyncExtinction.sh
Le script s'execute quand je le lance en bash.
Mais rien ne se passe quand j'éteins ou reboot ma machine.
J'ai eu beau cherché mon erreur je ne trouve pas!
Est-ce que qq aurait une idée de ce qui ne marche pas ?
Merci d'avance
Hors ligne
#2 Le 19/03/2021, à 21:05
- kamaris
Re : Script qui ne se lance pas à l'extinction du PC
Il faut utiliser systemd désormais : une solution apparemment possible (pas testée du tout) : https://unix.stackexchange.com/a/41756
Hors ligne
#3 Le 19/03/2021, à 22:20
- jplemoine
Re : Script qui ne se lance pas à l'extinction du PC
Test à faire (mais pas sûr du tout que ce soit la solution) :
mettre le chemin de touch --> sur mon poste : /usr/bin/touch et non touch
Ce qui donne
...
/usr/bin/touch /home/cha/auRevoir.txt
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#4 Le 19/03/2021, à 23:20
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
Bonjour,
Voici un exemple de service systemd permettant de lancer un script à l'extinction du pc: (fonctionnel/en place sur mon pc)
/etc/systemd/system $ cat PourShutdown.service
[Unit]
Description=Utilisé par conky
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash /home/fab/mes_scripts/scriptPourShutdown.sh
[Install]
WantedBy=halt.target reboot.target shutdown.target
Voir la documentation pour créer le service:
https://doc.ubuntu-fr.org/creer_un_service_avec_systemd
#5 Le 22/03/2021, à 08:24
- boubchat
Re : Script qui ne se lance pas à l'extinction du PC
Merci infiniment de toutes ces réponses.
Je vais essayer les solutions et revenir vers vous pour valider laquelle a marcher pour moi
Encore milles merci
Hors ligne
#6 Le 22/03/2021, à 20:29
- boubchat
Re : Script qui ne se lance pas à l'extinction du PC
Ca y est, grâce à votre aide, j'ai mis en place un service qui exécute un script à l'extinction et un à l'allumage.
Mais ya un truc qui est très bizarre, c'est que contrairement au script à l'extinction qui lui se lance bien tout le temps, celui à l'allumage ne se déclenche qu'a peu près 70% du temps. Depuis tout a l'heure j'ai éteins et rallumé mon PC des dizaines de fois et j'ai pas compris le pattern qui faisait que parfois le script à l'allumage s'exécutait parfois non...
Ici les services:
PourDemarrage.service
[Unit]
Description=Execution Allumage
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/home/cha/Documents/ChaScripts/MailSyncDemarrer.sh
[Install]
WantedBy=multi-user.target
PourExtinction.service
[Unit]
Description=Execution à lextinction
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/home/cha/Documents/ChaScripts/MailSyncExtinction.sh
[Install]
WantedBy=halt.target reboot.target shutdown.target
Bien evidemment javais enablé les services avant:
cha@cha-ThinkPad-P50s:~$ systemctl is-enabled PourDemarrage.service
enabled
cha@cha-ThinkPad-P50s:~$ systemctl is-enabled PourExtinction.service
enabled
les scripts (avec un chmod pour les rendre executable):
MailSyncDemarrer.sh
#!/bin/sh
touch /home/cha/Hello.txt
MailSyncExtinction.sh
#!/bin/sh
touch /home/cha/auRevoir.txt
Enfin quand je lance:
systemctl status PourDemarrage.service
PourDemarrage.service - Execution Allumage
Loaded: loaded (/etc/systemd/system/PourDemarrage.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2021-03-22 20:08:52 CET; 17min ago
Main PID: 424 (code=exited, status=1/FAILURE)
mars 22 20:08:53 cha-ThinkPad-P50s MailSyncDemarrer.sh[424]: touch: cannot touch '/home/cha/Hello.txt': Read-only file system
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
mais ce message est présent même quand le fichier Hello.txt est apparu du coup, j'arrive pas à comprendre l'erreur (juste le main PID était différent 417 au lien de 424). Au début j'ai essayé de changer les droits mais ca n'a rien changé.
Pour note:
-rwxr-xr-x 1 cha cha 38 mars 22 19:01 MailSyncDemarrer.sh
-rwxr-xr-x 1 cha cha 40 mars 22 18:49 MailSyncExtinction.sh
-rwxr-xr-x 1 cha cha 143 mars 17 10:13 start_proc
-rwxr-xr-x 1 cha cha 232 mars 17 12:25 waitscript
Si qq à une idée, ça m'éviterait de m'arracher les cheveux plus longtemps...
Merci et bonne soirée
Hors ligne
#7 Le 22/03/2021, à 20:41
- kamaris
Re : Script qui ne se lance pas à l'extinction du PC
systemd lance les services dans un ordre aléatoire si je me souviens bien*, donc il faut peut-être t'assurer que le système de fichiers où se trouve /home/cha/Hello.txt est monté en écriture au moment où le service démarre.
Car là, manifestement, ça n'est pas le cas :
mars 22 20:08:53 cha-ThinkPad-P50s MailSyncDemarrer.sh[424]: touch: cannot touch '/home/cha/Hello.txt': Read-only file system
--
* ou peut-être plutôt : systemd monte les systèmes de fichiers dans un ordre aléatoire, ce qui au final revient au même pour ton problème.
Dernière modification par kamaris (Le 22/03/2021, à 20:44)
Hors ligne
#8 Le 22/03/2021, à 20:47
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
Pourdemarage.service essaie:
[Install]
WantedBy=graphical.target
Et dans tes scripts met les commandes avec leur chemin complet...
#9 Le 22/03/2021, à 21:05
- boubchat
Re : Script qui ne se lance pas à l'extinction du PC
Merci de vos réponse. Ca fait complètement sens car l'autre script marche tout le temps !
j'ai mis le wanted au graphical.target et le chemin correctement:
l'erreur diminue en fréquence mais reste présente je dirais une fois sur 10.
je vais essayer de trouver un moyen de lui dire "si le disque est pas monté recommencé la tache". ca vous parait etre une solution?
Hors ligne
#10 Le 22/03/2021, à 21:09
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
dans [unit]
ajoute :
After=graphical.target
?
#11 Le 22/03/2021, à 21:10
- kamaris
Re : Script qui ne se lance pas à l'extinction du PC
je vais essayer de trouver un moyen de lui dire "si le disque est pas monté recommencé la tache". ca vous parait etre une solution?
Il faut plutôt que tu trouves après qui il doit s'exécuter pour que ça fonctionne.
Essaie d'adapter une réponse de ce type à ton cas : https://unix.stackexchange.com/a/247547
Dernière modification par kamaris (Le 22/03/2021, à 21:10)
Hors ligne
#12 Le 22/03/2021, à 21:15
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
je vais essayer de trouver un moyen de lui dire "si le disque est pas monté recommencé la tache". ca vous parait etre une solution?
Tu nous avais pas prècisé que c'était pour ça... Je pense qu'il faudra aussi utiliser Wants=, je te laisse faire tes propres recherches sur le sujets.
#13 Le 22/03/2021, à 21:21
- boubchat
Re : Script qui ne se lance pas à l'extinction du PC
Bonnnnnn !!! Ca a l'air de marché, j'ai essayé, ca s'execute 10/10
J'ai pris en compte After=graphical.target
Je pense que ca et le WantedBy=graphical.target étaient la solution !
Pfiou ca me rendait folle que ca se lance randomly
Merci infiniment de votre aide, j'aurai jamais compris cette randomness sans vos postes
Bonne soirée !
Hors ligne
#14 Le 22/03/2021, à 21:27
- kamaris
Re : Script qui ne se lance pas à l'extinction du PC
Pas sûr que ce soit optimal cependant, j'ai l'impression qu'attendre un des services listés dans
systemctl list-units --type=mount
aurait été préférable (comme indiqué dans le lien cité plus haut), mais je ne peux pas l'affirmer, je ne pratique pas assez les services systemd.
Dans ce post aussi : https://bbs.archlinux.org/viewtopic.php … 3#p1558593, on trouve
[Install]
WantedBy=multi-user.target
After=home.mount
mais ça n'a probablement un sens que si l'on a une partition séparée pour le home.
Hors ligne
#15 Le 22/03/2021, à 21:42
- MicP
Re : Script qui ne se lance pas à l'extinction du PC
Bonjour
… ExecStart=/home/cha/Documents/ChaScripts/MailSyncDemarrer.sh …
On ne voit pas le contenu de ce script, et c'est bien dommage,
mais vu le nom de ce script, on pourrait supposer que ce script ne pourra fonctionner
qu'à condition que les périphériques réseau aient bien été activés et que le réseau soit effectivement accessible.
Dernière modification par MicP (Le 22/03/2021, à 21:44)
Hors ligne
#16 Le 22/03/2021, à 21:52
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
Pas sûr que ce soit optimal cependant,
Je le pense aussi
Mes connaissances sur le sujet se limitent aux recherches que j'avais entrepris pour réaliser mes propres services et mes besoins étaient différents...
Je pense que d'autres recherches pour ce cas particulier ne seraient pas superflues.
#17 Le 22/03/2021, à 22:00
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
Bonjour
Dans son message #6, boubchat a écrit :… ExecStart=/home/cha/Documents/ChaScripts/MailSyncDemarrer.sh …
On ne voit pas le contenu de ce script, et c'est bien dommage,
mais vu le nom de ce script, on pourrait supposer que ce script ne pourra fonctionner
qu'à condition que les périphériques réseau aient bien été activés et que le réseau soit effectivement accessible.
Bonjour,
dans ce cas utiliser comme target , network.target ou plus probablement network-online.target
édit: Pour visualiser les targets présent sur notre system:
systemctl list-units --type target
Dernière modification par Compte supprimé (Le 22/03/2021, à 22:03)
#18 Le 22/03/2021, à 22:44
- MicP
Re : Script qui ne se lance pas à l'extinction du PC
Effectivement, network-online.target semblerait être un bon candidat si le script faisait bien ce que son nom pourrait laisser à penser,
mais il y a peut-être aussi d'autres conditions qui seraient nécessaires (voire indispensables) ou peut-être plus optimales … en fonction de ce que fait réellement le script.
Dernière modification par MicP (Le 22/03/2021, à 22:45)
Hors ligne
#19 Le 22/03/2021, à 22:53
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
Tout à fait
Un service se construit sur mesure. Perso, lorsque j'ai fait les miens, aucune propositions du net n'étaient pas adaptées à ma demande. J'avais alors trouvé une bonne doc sur le sujet, mais malheureusement je ne la retrouve pas
#20 Le 23/03/2021, à 09:05
- boubchat
Re : Script qui ne se lance pas à l'extinction du PC
Bonjour à tous,
Merci à tous pour vos réponses !
On ne voit pas le contenu de ce script, et c'est bien dommage,
Il me semble bien le voir dans mon post d'hier soir à 21h. En tous cas, moi je le vois écrit dans le post, y aurait il un bug ?:
#!/bin/sh
touch /home/cha/Hello.txt
Pour l'histoire, la création d'un fichier text n'était qu'un flag pour voir si le script et le service marchaient. Le but ensuite est de synchroniser deux dossiers ensemble. Mais du coup j'ai commencé par le flag d'abord, histoire de comprendre comment tout ca marche. je vais maintenant faire un rsync entre les dossiers (a voir si ils sont bien montés au moment du rsync)... A voir si le rsync marchera
Merci pour le
systemctl list-units --type target
super utile!! Effectivement je vais regarder comment je vais adapter l'écriture du wantedBy selon ce qu'il me propose mais effectivement network-online.target me semble une bonne solution
Merci encore pour vos aides précieuses
Dernière modification par boubchat (Le 23/03/2021, à 09:10)
Hors ligne
#21 Le 23/03/2021, à 09:31
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
Pour info, on peut aussi créer aussi ses propres targets ... (inutile pour la demande de ce post)
#22 Le 23/03/2021, à 09:37
- MicP
Re : Script qui ne se lance pas à l'extinction du PC
…Il me semble bien le voir dans mon post d'hier soir à 21h. En tous cas, moi je le vois écrit dans le post, y aurait il un bug ?: …
Je parlais du script nommé /home/cha/Documents/ChaScripts/MailSyncDemarrer.sh
et tant qu'à faire, de celui qui est aussi nommé : /home/cha/Documents/ChaScripts/MailSyncExtinction.sh
parce que c'est en fonction des commandes (ou autres scripts) qu'ils vont lancer
que l'on pourra déterminer quelle(s) unitée(s) seront indispensable(s) à leur fonctionnement.
Bien sûr, tu pourras caviarder (s'il y en a) les adresses mail et mots de passe.
Hors ligne
#23 Le 23/03/2021, à 09:56
- boubchat
Re : Script qui ne se lance pas à l'extinction du PC
MicP Ok j'avais cru que vous ne le voyiez pas sur le site.
Maintenant je comprends mieux. C'était un rsync entre deux dossiers (dont un dropbox).
Pour les prochains je vais mettre les scripts et services même si ils ne sont pas beaux, ca donnera des idées (ou pas )
PourDemarrage.service
[Unit]
Description=Execution Allumage
DefaultDependencies=no
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/home/cha/Documents/ChaScripts/MailSyncDemarrer.sh
[Install]
WantedBy= network-online.target
avec
MailSyncDemarrer.sh
#!/bin/sh
/usr/bin/touch /home/cha/Hello.txt
rsync -a --delete /home/cha/Dropbox/Mail\ Sauvegarde/ /home/cha/snap/thunderbird/common/.thunderbird/
PourExtinction.service
[Unit]
Description=Execution à lexinction
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/home/cha/Documents/ChaScripts/MailSyncExtinction.sh
[Install]
WantedBy=halt.target reboot.target shutdown.target
avec
MailSyncExtinction.sh
#!/bin/sh
/usr/bin/touch /home/cha/auRevoir.txt
rsync -a --delete /home/cha/snap/thunderbird/common/.thunderbird/ /home/cha/Dropbox/Mail\ Sauvegarde/
i=$(dropbox status)
j="Up to date"
sleep 2
x=1
while [ "$i" != "$j" ]
do
if [ "$x" = 1 ]
then
notify-send "Still busy to turn off"
i=$(dropbox status)
else
i=$(dropbox status)
fi
done
shutdown -r now
en ayant bien évidement :
- rendu les scripts executable pour les .sh (chmod et compagnie)
- rendu les .service enable
!!!!! je précise que ces scripts sont ceux d'une complète autodidacte ubuntu bash etc. Il est possible qu'il brule les yeux de plus d'un . C'est cependant le résultat que j'ai pu faire dans un lapse de temps et de connaissances relativement limités. Mais même pas beaux, ils pourront peut-être aider certains
En tous cas merci encore mille fois à tous ceux qui ont pris le temps de m'aider !!!!
Hors ligne
#24 Le 23/03/2021, à 11:11
- MicP
Re : Script qui ne se lance pas à l'extinction du PC
Pour ton script MailSyncExtinction.sh
je te propose d'utiliser une boucle until :
#!/bin/sh
/usr/bin/touch /home/cha/auRevoir.txt
rsync -a --delete /home/cha/snap/thunderbird/common/.thunderbird/ /home/cha/Dropbox/Mail\ Sauvegarde/
until [ "$(dropbox status)" = "Up to date" ]
do
notify-send --expire-time=1800 "Still busy to turn off"
sleep 2
done
EDIT : J'ai supprimé le shutdown
Dernière modification par MicP (Le 23/03/2021, à 13:30)
Hors ligne
#25 Le 23/03/2021, à 12:25
- Compte supprimé
Re : Script qui ne se lance pas à l'extinction du PC
PourExtinction.service
[Unit] Description=Execution à lexinction DefaultDependencies=no [Service] Type=oneshot RemainAfterExit=yes ExecStart=/home/cha/Documents/ChaScripts/MailSyncExtinction.sh [Install] WantedBy=halt.target reboot.target shutdown.target
Il te manque dans [unit] la ligne :
Before=shutdown.target reboot.target halt.target
D'autre part je vois la présence de shutdown dans les scripts, ce qui est inutile vu que la demande d'éteindre(ou de rebooter,...) est déjà initialisée.
Un truc qui me géne aussi (sous réserve que mes souvenirs soient bons, je peux me tromper )c'est qu'un service ne doit pas être bloquant .Il sera lancé mais risque de ne pas avoir le temps de s'exécuter avant l'extinction . Faudrait faire des recherches sur le sujet pour voir ce qu'il en retourne . Ce type de service ont du être mis en place part d'autres personnes...
Dernière modification par Compte supprimé (Le 23/03/2021, à 12:33)