Re: udev: Lancer un script à l'insertion d'une clé USB
Le 2023-10-12 14:20, Fabrice Delvallée a écrit : J'ai pas encore testé le service. Je suis novice en systemd et je ne sais pas non plus demandé a udev de monter la clé :) Voilà le contenu du fichier `/etc/systemd/system/backup.service` ``` [Unit] Description=Backup [Service] Type=oneshot ExecStart=/usr/local/sbin/backup.pl TimeoutSec=0 GuessMainPID=false RemainAfterExit=no ``` La commande `systemctl daemon-reload` permet à Systemd de prendre connaissance de ton nouveau service. Je t'épargne le contenu de mon `backup.pl` qui est trop spécifique à mon besoin pour être intéressant… Tu peux le remplacer par un `backup.sh` dans lequel tu feras le montage de ton disque et le rsync. Sébastien
Re: udev: Lancer un script à l'insertion d'une clé USB
On 12/10/2023 11:38, Sébastien NOBILI wrote: Le 2023-10-12 11:06, Erwann Le Bras a écrit : Le 12/10/2023 à 09:06, fabrice a écrit : Le montage automatique de la clé s’effectue après l’exécution de la règle udev, même si je tente une commande mount dans le script, /dev/sdd n’est pas encore disponible. Une simple boucle d'attente? do sleep 5 while ! [ -d /dev/sdd] Ma réponse précédente n'abordait pas ce point… je précise donc. Ce n'est pas nécessaire. Ma règle udev est décrite comme ça : ``` KERNEL=="sd?2", ACTION=="add", ATTRS{vendor}=="...", ATTRS{model}=="...", RUN+="/bin/systemctl --no-block start backup.service" ``` C'est quand un `/dev/sd*2` est créé et qu'il correspond au vendor/model de mon disque que la sauvegarde est lancée. Sébastien J'ai tenté un sleep 60, la clé se monte automatiquement quand le script ce termine. J'ai tenté de mettre le processus en arriere plan avec un & (KERNEL=="sd*", ACTION=="add", RUN+="/bin/bash -c '/usr/local/bin/scanusb.sh %k &') La clé se monte presque instantanément, le script est "tué" J'ai pas encore testé le service. Je suis novice en systemd et je ne sais pas non plus demandé a udev de monter la clé :) Fabrice
Re: udev: Lancer un script à l'insertion d'une clé USB
Le 2023-10-12 11:06, Erwann Le Bras a écrit : Le 12/10/2023 à 09:06, fabrice a écrit : Le montage automatique de la clé s’effectue après l’exécution de la règle udev, même si je tente une commande mount dans le script, /dev/sdd n’est pas encore disponible. Une simple boucle d'attente? do sleep 5 while ! [ -d /dev/sdd] Ma réponse précédente n'abordait pas ce point… je précise donc. Ce n'est pas nécessaire. Ma règle udev est décrite comme ça : ``` KERNEL=="sd?2", ACTION=="add", ATTRS{vendor}=="...", ATTRS{model}=="...", RUN+="/bin/systemctl --no-block start backup.service" ``` C'est quand un `/dev/sd*2` est créé et qu'il correspond au vendor/model de mon disque que la sauvegarde est lancée. Sébastien
Re: udev: Lancer un script à l'insertion d'une clé USB
Le 12/10/2023 à 09:06, fabrice a écrit : Le montage automatique de la clé s’effectue après l’exécution de la règle udev, même si je tente une commande mount dans le script, /dev/sdd n’est pas encore disponible. Une simple boucle d'attente? do sleep 5 while ! [ -d /dev/sdd] ou qchose d'approchant Erwann
Re: udev: Lancer un script à l'insertion d'une clé USB
Bonjour, Le 2023-10-12 09:06, fabrice a écrit : Le montage automatique de la clé s’effectue après l’exécution de la règle udev, même si je tente une commande mount dans le script, /dev/sdd n’est pas encore disponible. Comment faire pour lancer la règle udev âpres que la cle soit monté ? udev intervient avant. Tu ne pourras pas. Mais tu peux très bien demander à udev de lancer un script qui va monter la clé et lancer ton rsync. C'est ce que je fais (lancement auto de sauvegarde à l'insertion d'un disque). Attention : si la commande est trop longue (et ce sera probablement le cas avec ton rsync), alors elle se fait tuer. Pour contourner ça j'ai créé un service Systemd et udev déclenche le lancement du service. Côté udev ça prend une fraction de seconde et ma sauvegarde peut prendre plusieurs dizaines de minutes. Enfin, plutôt que de te baser sur `/dev/sdd` qui est susceptible de changer, je te conseille de référencer ton disque par son UUID (via `/dev/disk/by-uuid/`). Sébastien
udev: Lancer un script à l'insertion d'une clé USB
Bonjour Je cherche a lancé lors de l’insertion d’une clé USB une commande de sauvegarde rsync à l'aide udev. Comme premier test, j’ai créé le fichier « /etc/udev/rules.d/cat /99-usb_scan.rules » contenant : KERNEL=="sd*", ACTION=="add", RUN+="/bin/bash -c '/usr/local/bin/scanusb.sh %k'" rechargé udev |udevadm control --reload-rules| La commande « udevadm test /dev/sdd » affiche bien « run: '/bin/bash -c '/usr/local/bin/scanusb.sh sdd'' » le script scanusb.sh contient : #!/bin/bash FILE="usb_scan.log" echo "** Scan - USB - $1 **" > /tmp/$FILE date >> /tmp/$FILE id >> /tmp/$FILE sleep 30 cat /proc/mounts | grep "sd" >> /tmp/$FILE sleep 3 echo "** EOF ** " >> /tmp/$FILE J'ai pas de /dev/sdd dans le fichier de log. Le montage automatique de la clé s’effectue après l’exécution de la règle udev, même si je tente une commande mount dans le script, /dev/sdd n’est pas encore disponible. Comment faire pour lancer la règle udev âpres que la cle soit monté ? Merci pour votre aide