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 03/04/2020, à 10: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, à 10: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.


Desktop & Laptop - Ubuntu Mate dernière LTS - Intel i5 - 16 Go - Dual boot Windows offline

Hors ligne

#3 Le 03/04/2020, à 10:33

bruno

Re : Exécution script arrêt et redémarrage

LukePerp a écrit :

5. Si le script nécessite sudo, alors autoriser son exécution avec sudoers.

Inutile puisque le service est exécuté par root.

En ligne

#4 Le 03/04/2020, à 11: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, à 11: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, à 11:46)

En ligne

#6 Le 03/04/2020, à 11: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, à 12: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, à 13:39)

En ligne

#8 Le 03/04/2020, à 13: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, à 14: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, à 14:57)

Hors ligne

#10 Le 06/04/2020, à 08:39

vladmaia

Re : Exécution script arrêt et redémarrage

Merci pour ces réponses.

Hors ligne