logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 07-11-2023 19:10:11

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

[Résolu] Montage automatique disque USB et lancement de script

Bonjour,

Je galère depuis deux jours sur le problème suivant. Je veux lancer une sauvegarde automatique sur un support amovible USB lors de son insertion.

En grattant un peu j'ai trouvé comment monter automatiquement le support et comment lancer rsync. Voici les trois fichiers créés dans /etc/systemd/system :
Fichier : media-sylvain-TOTO.mount

[Unit]
Description=Mount TOTO

[Mount]
What=/dev/disk/by-uuid/mon-uuid
Where=/media/sylvain/TOTO
Type=ext4
Options=noauto

[Install]
WantedBy=multi-user.target
 


Fichier : media-sylvain-TOTO.automount

Unit]
Description=Automount TOTO

[Automount]
Where=/media/sylvain/TOTO

[Install]
WantedBy=multi-user.target
 


Fichier backup-sylvain.service

[Unit]
Description=Backup fichiers principaux Sylvain
Requires=media-sylvain-GANDALF.automount
After=media-sylvain-GANDALF.automount

[Service]
Type=oneshot
ExecStart=/home/sylvain/.local/bin/rsync-toto

[Install]
WantedBy=multi-user.target
 


Bien sûr, le tout activé comme il se doit.

Mon problème : tout ceci marche très bien, la sauvegarde est lancée à l'insertion du disque USB... mais :
- si le disque n'est pas inséré lors du boot, j'ai un délais d'attente d'une minute lors du boot ; l'option noauto du mount n'y change rien ;
- si je démonte le disque, je ne peux plus relancer la sauvegarde si je le connecte à nouveau au cours d'une même session.

Je m'y perds franchement dans toutes les docs de systemd et j'ai essayé pas mal de choses sans succès.
Sylvain

Dernière modification par sylvain_78 (22-12-2023 12:09:22)

Hors ligne

#2 08-11-2023 14:26:45

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Montage automatique disque USB et lancement de script

Sauf erreur de ma part la fonctionnalité "automount" concerne le montage à la demande (lors de l'accès) et non le montage automatique lors du branchement.

Il vaut mieux montrer que raconter.

Hors ligne

#3 08-11-2023 15:17:12

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

En fait l'unité automount lance bien l'unité mount à l'instant où le disque USB est connecté. En effet j'ai je peux alors constater le lancement de rsync alors que je n'ai rien fait pour accéder au disque.

En revanche, si je déconnecte le disque il n'est pas remonté automatiquement si je le reconnecte à nouveau. À ce moment là l'unité mount est toujours enabled mais deactivated.

Hors ligne

#4 08-11-2023 16:39:18

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

Petite avancée : si je 'restart' l'unité automount après le démontage du disque, le disque est à nouveau monté automatiquement à l'insertion.
Reste à savoir comment relancer l'unité automount après un démontage... J'ai essayé un Restart=True dans la section [Unit] sans succès : la directive est inconnue et ignorée.

Hors ligne

#5 08-11-2023 17:12:27

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

Ben ça marche plus...
Mais tu as raison Raleur, l'unité mount est bien activée lors d'un accès au répertoire de montage. Sans relancer automount il y a bien montage quand j'accède au répertoire de montage.
Dans mon cas, comme un service était lancée après l'unité mount et que ce service accédait au disque, le montage était fait. Je dis bien était... car le service ne se lance plus...

Hors ligne

#6 08-11-2023 21:05:32

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] Montage automatique disque USB et lancement de script

Je peux me tromper, mais ma compréhension de la page de manuel de systemd.automount me laisse penser que cela ne correspond pas à ton besoin.
Je regarderais plutôt du côté de systemd.path pour déclencher une action lorsqu'un chemin existe. Quant au montage, il peut généralement être effectué automatiquement au branchement par l'environnement de bureau de la session graphique s'il y en a une.

PS: tu as conscience que c'est très risqué de faire exécuter un programme situé dans un répertoire utilisateur par une unité système qui a les droits root ?

Il vaut mieux montrer que raconter.

Hors ligne

#7 09-11-2023 12:12:05

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

Merci Raleur, je vais regarder ça.
Quant au script dans le répertoire utilisateur, tu as mille fois raison... Déplacé !

Hors ligne

#8 09-11-2023 18:32:47

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

Bon, ça marche plutôt pas mal avec ta solution Raleur :
- unités mount et automount désactivées et effacées ;
- KDE configuré pour monter automatiquement le disque USB (j'espère que Gnome et Xfce savent faire aussi...) ;
- deux unités créées et activées : toto.path et toto.service :
    - toto.path déclenche toto.service à l'insertion du disque (découverte d'un fichier spécifique sur le disque USB) ;
    - toto.service lance le script de sauvegarde ;
    - je reçois bien le courriel d'exécution du script.

Mais... après tout ça, si je démonte le disque USB et que je le remonte quelques secondes plus tard, toto.path ne déclenche plus toto.service. Pour autant les deux services sont bien actifs et systemctl status toto.path toto.service ne renvoie aucune erreur. J'ai essayé aussi de relancer toto,path.

toto.path

[Unit]
Description=Unité activée si USB disk monté

[Path]
PathExists=/media/sylvain/USBDISK/mon_fichier
Unit=toto.service

[Install]
WantedBy=graphical.target
#WantedBy=paths.target  <-- tenté...


toto.service

[Unit]
Description=Backup fichiers principaux Sylvain

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/root/.local/bin/mon_script

[Install]
WantedBy=graphical.target

Dernière modification par sylvain_78 (09-11-2023 18:43:35)

Hors ligne

#9 13-11-2023 17:36:41

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

Bonjour,

Toujours sur l'ouvrage, j'ai été aiguillé vers la bonne solution (https://forums.debian.net/viewtopic.php?t=157154).
Pas de fichier toto.path mais une règle udev qui lance le service désiré, lequel lance le script voulu.

Au final, voici la configuration obtenue :
/etc/udev/rules/90-ma-regle.rules

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="########", TAG+="systemd", ENV{SYSTEMD_WANTS}="toto.service"

Le ATTRS{serial} est optionnel, auquel cas l'identification du disque sera à faire dans le script.
Activation de la règle :

udevadm control --reload-rules && udevadm trigger



/etc/systemd/system/toto.service

[Unit]
Description=Backup fichiers principaux

[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/root/.local/bin/mon_script

[Install]
WantedBy=multi-user.target


Désormais le script se lance à chaque branchement du disque USB.

Mais... le script se lance en root. Or j'aimerais informer l'utilisateur au lancement du script et à la fin du traitement. Pour le moment j'envoie un simple courriel à la fin mais ce n'est pas top. Mais bon, c'est un autre sujet...

Sylvain

Hors ligne

#10 14-11-2023 17:02:01

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

Petite précision : voici comment lancer le script en tant que user.

/etc/systemd/system/toto.service

[Unit]
Description=Backup fichiers principaux

[Service]
Type=oneshot
User=toto
Group=toto
RemainAfterExit=no
ExecStart=/home/toto/.local/bin/mon_script

[Install]
WantedBy=multi-user.target


J'ai testé une commande root dans le script, elle est correctement bloquée.

Dernière modification par sylvain_78 (14-11-2023 17:03:51)

Hors ligne

#11 19-11-2023 15:50:56

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

Bonjour,

J'ai finalement réussi à faire ce que je cherche. Voici les éléments :

La règle udev (/etc/udev/rules/90_sauvegardes_disque.rules)

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="########", TAG+="systemd", ENV{SYSTEMD_WANTS}="sync-files-on-disk.service"



Le service systemd (/etc/systemd/system/sync-files-on-disk.service) :

[Unit]
Description=Synchro fichiers sur disque
OnSuccess=send_mails_now.service

[Service]
Type=oneshot
RemainAfterExit=no
User=<user>
Group=<user-grp>

Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/<user>/.Xauthority"
Environment="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus"

ExecStart=/home/<user>/.local/bin/toto.sh

[Install]
WantedBy=graphical.target



Concernant le service :
- les directives "User" et "Group" de la rubrique [Service] imposent une exécution du script toto.sh comme <user>. J'ai testé une commande root dans le script, elle a été bloquée.
- les directives "Environment" de la rubrique [Service] permettent de lancer des applications dans un environnement de bureau à partir du script toto.sh. La dernière est nécessaire si on souhaite utiliser dbus, comme dans mon cas avec notify-send. Les valeurs des clés sont obtenues en lançant printenv en <user> dans un terminal.
- la directive "OnSuccess" de la rubrique [Unit] permet de lancer un autre service lorsque dummy.service est terminé. Ici il s'agit de vider la file d'attente des messages à envoyer d'exim4 (je ne sais pas s'il est possible de le faire avec la commande mail).

Désormais toto.sh se lance à chaque branchement du disque USB. J'ai des notifications d'avancement et une synthèse dans une fenêtre et par courriel.

Il me reste à peaufiner le script...

Bon dimanche !
Sylvain

Dernière modification par sylvain_78 (19-11-2023 15:51:25)

Hors ligne

#12 22-12-2023 13:05:28

sylvain_78
Membre
Lieu : Nouvelle Aquitaine
Distrib. : Bookworm
Noyau : Linux 6.1.0-13-amd64
(G)UI : KDE plasma
Inscription : 31-10-2017

Re : [Résolu] Montage automatique disque USB et lancement de script

Bonjour !

Je suis venu à bout des difficultés et j'ai obtenu ce que je voulais avec votre aide.
Il me reste à traiter un cas de sauvegarde de documents présents sur une partition chiffrée.

Pour synthétiser le tout, j'ai commis le document suivant (je sais, Google c'est pas bien...) :
https://drive.google.com/file/d/1cSlsJB … drive_link (MàJ)
Je suis évidemment preneur de vos remarques.

Joyeux Noël !
Sylvain

Dernière modification par sylvain_78 (24-12-2023 18:40:11)

Hors ligne

Pied de page des forums