web-dev-qa-db-fra.com

Exécuter le script lorsqu'un lecteur toujours connecté est monté

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.

2
Sqerstet

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.

4
Sqerstet