Comment puis-je déclencher l'exécution d'un script lorsqu'un lecteur toujours connecté est monté?
J'ai essayé udev
, en plaçant spécifiquement une règle 99-local.rules
dans /etc/udev/rules.d
:
KERNEL=="mmcblk0",ACTION=="mount",RUN+="/path/to/script.sh"
Et recharger les règles. Mais le script ne s'exécute pas lorsque le lecteur est monté.
Notez que le lecteur est un carte SD, d'où le mmcblk0
bloquer le nom du périphérique. C'est pas un lecteur USB et pas en cours de branchement à chaud.
Il s'avère que ce n'est pas facile à réaliser avec udev
. Avec udevadm monitor -p
J'ai vérifié que, une fois montée, ma carte SD ne tire pas ACTION=="mount"
événement dans udev
. J'ai lu quelque part que l'événement mount
a été déprécié ou supprimé, ce qui, s'il était vrai, l'expliquerait. udev
, après tout, est censé gérer le branchement à chaud.
De plus, les scripts déclenchés par udev
doivent se terminer très rapidement car ils bloquent udev
pendant leur exécution. Pas idéal pour une tâche importante, par exemple la sauvegarde.
J'ai atteint mon objectif en écrivant un fichier de service systemd
dans /etc/systemd/system/
en utilisant ExecStart
pour .mount
:
[Unit]
Description=Script to run when drive mounted at /path/to/Stuff
Requires=path-to-Stuff.mount
After=path-to-Stuff.mount
[Service]
ExecStart=/path/to/script.sh
Type=forking
[Install]
WantedBy=path-to-Stuff.mount
Fonctionne correctement, bien qu'il nécessite de spécifier le point de montage.