Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 smile

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 smile

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

boubchat a écrit :

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

boubchat a écrit :

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 smile

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 big_smile

Merci infiniment de votre aide, j'aurai jamais compris cette randomness sans vos postes smile

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

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.

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

kamaris a écrit :

Pas sûr que ce soit optimal cependant,

Je le pense aussi roll
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

MicP a écrit :

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 wink
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 hmm

#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 smile

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 smile

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 big_smile )

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 big_smile. 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 smile

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

boubchat a écrit :

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)