#1 Le 03/04/2020, à 09:16
- vladmaia
Exécution script arrêt et redémarrage
Bonjour,
J'utilise actuellement un script pour synchroniser des home utilisateurs vers un serveur Windows et vice versa. Cela fonctionne très bien à l'ouverture et à la fermeture de la session utilisateur.
Je souhaiterais exécuter ce script lorsque l'utilisateur arrête ou redémarre l'ordinateur. (bouton arrêt et redémarrage sur sa session)
Comment dois je procéder?
Voici ma configuration actuelle:
A l'ouverture de session:
Script rsync dans /etc/gdm3/PreSession/Defaut/
A la fermeture de session:
/etc/pam.d/common-session
pam_exec.so /path_du_script_rsync
J'ai pensé à désactiver les boutons arrêt et redémarrer sur la session mais les postes sont en dual-boot. Il faut donc qu'ils aient la possibilité de pouvoir redémarrer l'ordinateur.
En vous remerciant par avance.
Bien cordialement.
Hors ligne
#2 Le 03/04/2020, à 09:22
- LukePerp
Re : Exécution script arrêt et redémarrage
Bonjour,
Exécuter un script à l'arrêt du système
1. Créer son script et le rendre exécutable
2. Créer un fichier service :
/etc/systemd/system/NomDuFichier.service
3. Le fichier doit contenir ces lignes :
[Unit]
Description=...
RequiresMountsFor=/home
Before=shutdown.target reboot.target halt.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=/home/UTILISATEUR/CheminDuScript.sh
[Install]
WantedBy=multi-user.target
4. Activer le service :
sudo systemctl enable NomDuFichier.service
5. Si le script nécessite sudo, alors autoriser son exécution avec sudoers.
Gamer inside - Ubuntu Mate dernière LTS - Intel i5, 16 Go - Dual boot Windows - Utilisateur de Dapps sur Ethereum
Hors ligne
#3 Le 03/04/2020, à 09:33
- bruno
Re : Exécution script arrêt et redémarrage
5. Si le script nécessite sudo, alors autoriser son exécution avec sudoers.
Inutile puisque le service est exécuté par root.
#4 Le 03/04/2020, à 10:28
- vladmaia
Re : Exécution script arrêt et redémarrage
Bonjour,
Merci pour cette réponse.
J'ai donc ajouté ce service mais cela ne fonctionne pas.
Que veut dire "RequiresMountFor "?
Merci.
Hors ligne
#5 Le 03/04/2020, à 10:44
- bruno
Re : Exécution script arrêt et redémarrage
Cela devrait fonctionner
cf. ./viewtopic.php?pid=22010350#p22010350
Vérifie bien que ton script est exécutable et utilise les chemins complets des exécutables (/usr/bin/rsync, par exemple) ou qu'il renseigne la variable PATH.
Que veut dire "RequiresMountFor "?
Comme son nom l'indique : nécessite que ce dossier soit monté (/home). Personnellement je ne l'utiliserais pas, sauf s'il y a une partition spécifique pour /home, et encore je ne pense pas que ce soit nécessaire.
Dernière modification par bruno (Le 03/04/2020, à 10:46)
#6 Le 03/04/2020, à 10:55
- vladmaia
Re : Exécution script arrêt et redémarrage
Voici le détail de mes fichiers:
/etc/systemd/system/rsync_home.service
[Unit]
Before=shutdown.target reboot.target halt.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=/usr/local/bin/rsyncproflogout.sh
[Install]
WantedBy=multi-user.target
/usr/local/bin/rsyncproflogout.sh
rsync -av --progress /home/$USER/ /home/$USER/Perso/profilLNX/
Hors ligne
#7 Le 03/04/2020, à 11:32
- bruno
Re : Exécution script arrêt et redémarrage
Utilises les balises [ code ] dans ton message STP.
Il faut le shebang, le chemin complet des exécutables dans le script et ne pas utiliser la variable $USER qui n'est pas connue lors de l'exécution du script :
#!/bin/bash
/usr/bin/rsync -av --progress /home/toto/ /home/toto/Perso/profilLNX/
Dernière modification par bruno (Le 03/04/2020, à 12:39)
#8 Le 03/04/2020, à 12:28
- vladmaia
Re : Exécution script arrêt et redémarrage
Cela fonctionne et je vous en remercie. Auriez vous une solution pour prendre en compte la variable $USER ?
Merci.
Hors ligne
#9 Le 03/04/2020, à 13:36
- MicP
Re : Exécution script arrêt et redémarrage
Bonjour
Étant donné que l'utilisateur qui a lancé la procédure d'arrêt de la machine
aura été le dernier compte utilisateur a être déconnecté de sa session,
son nom de login sera enregistré dans le fichier /var/log/auth.log
Tu peux lancer la ligne de commande suivante
pour voir s'afficher le dernier nom du compte utilisateur
qui a été déconnecté de sa session :
sed -n '/gdm-password:session): session closed for user /h;${x;s/.* //;p}' /var/log/auth.log
=======
Donc, en créant une variable avec ce nom,
ça donnerait pour le script rsync :
#!/bin/bash
monUSER=$(/bin/sed -n '/gdm-password:session): session closed for user /h;${x;s/.* //;p}' /var/log/auth.log)
/usr/bin/rsync -av --progress /home/$monUSER/ /home/$monUSER/Perso/profilLNX/
NOTE : Je n'ai pas l'habitude d'utiliser rsync
alors je ne suis pas sûr du tout de la ligne de commande rsync que j'ai recopiée
car il me semble qu'elle va remplir indéfiniment le répertoire source vu que la cible est un des sous-répertoires de la source.
Dernière modification par MicP (Le 03/04/2020, à 13:57)
Hors ligne
#10 Le 06/04/2020, à 07:39
- vladmaia
Re : Exécution script arrêt et redémarrage
Merci pour ces réponses.
Hors ligne