Re: udev: Lancer un script à l'insertion d'une clé USB

2023-10-12 Par sujet Sébastien NOBILI

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

2023-10-12 Par sujet Fabrice Delvallée



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

2023-10-12 Par sujet Sébastien NOBILI

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

2023-10-12 Par sujet Erwann Le Bras



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

2023-10-12 Par sujet Sébastien NOBILI

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

2023-10-12 Par sujet fabrice

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