Bonjour,
merci pour cette suggestion, je vais essayer de jouer dans cette direction.
Cependant dans les commentaires de la page de jasonwryan indiquée, il y
a un contributeur qui dit que la règle udev ne sert à rien et que c'est
le service qui fait tout. Confusing dirait un anglophone.
L'idée de Marc avec le lockfile me paraît pas mal non plus. Ça fait un
peu méchant bricolage, mais c'est peut-être plus simple à mettre en
place si je n'arrive pas à la soluce 1.
J'essaie et je vous dis.
Michel
Le 20/12/2017 à 13:37, nicolas michon a écrit :
> Bonjour,
>
> ce n'est pas possible directement avec les units systemd.
>
> Par contre il y a une intégration entre udev et systemd qui permet de
> lancer assez facilement un service lors d'un événement (branchement d'un
> dd externe par exemple).
>
> Il faut isoler le disque dur dans les règles udev ("udevadm monitor" est
> pratique) et écrire une règle udev qui va lancer le service:
>
> $ cat > /etc/udev/rules.d/99-backup.rules << EOF
> KERNEL=="sd?1", ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="JetFlash", ATTRS{model}=="Transcend 4GB ", RUN+="/usr/bin/systemctl --no-block start backup.service"
> EOF
> $ udevadm control --reload
>
> A la place de "RUN+=" qui va timeout si l'execution est longue, il est
> conseill|é||||d'utiliser "||ENV{SYSTEMD_WANTS}=="mon_service.service".
> |||
> Pour umount, j'image qu'un "umount /mnt/sauvegarde" en ExecStop du
> service pourrait faire l'affaire.
>
> Un exemple complet ici: http://jasonwryan.com/blog/2014/01/20/udev/
>
>
> On 19/12/17 20:41, Michel Roche wrote:
>> Bonjour,
>> malgré mon sujet à deux balles, je voulais vous parler d'un truc hypra
>> moderne : systemd/systemctl, le machin à tout faire (presque)
>> automatiquement chez debian
>>
>> Je cherche à réaliser un truc tout bête :
>> - au branchement d'un certain disque usb, je le monte à un endroit convenu
>> - pis juste après je lance un script
>> - et à la fin je démonte le disque
>> Vous aurez sans doute deviné que mon script contient surtout des lignes
>> qui commencent par rsync :-)
>>
>> Dans /etc/systemd/system j'ai donc créé un unit de type mount :
>> mnt-sauvegarde.mount
>>
>> [Unit]
>>
>>
>> DefaultDependencies=no
>>
>>
>> Conflicts=umount.target
>>
>>
>> Before=umount.target
>>
>>
>> StopWhenUnneeded=true
>>
>>
>> PartOf=sauvegarde.service
>>
>>
>> After=sauvegarde.service
>>
>> |
>> [Mount]
>>
>>
>> What=/dev/disk/by-uuid/zeUUIDofZeDisk
>>
>>
>> Where=/mnt/sauvegarde
>>
>>
>>
>> |
>> [Install]
>>
>>
>> WantedBy=multi-user.target
>>
>> Et mon service : sauvegarde.service
>> [Unit]
>>
>>
>> Description="Exécuter la sauvegarde"
>>
>>
>> BindsTo=mnt-sauvegarde.mount
>>
>>
>> After=mnt-sauvegarde.mount
>>
>> |
>> [Service]
>>
>>
>> Type=oneshot (j'ai essayé avec rien, soit type=simple)
>>
>>
>> User=root
>>
>>
>> ExecStart=/usr/local/bin/scriptsauvegarde.sh
>>
>>
>> |
>> RemainAfterExit=true (j'ai essayé sans au début)
>>
>> |
>> [Install]
>>
>>
>> WantedBy=multi-user.target
>>
>> J'ai enabled les units tout comme il faut, et d'ailleurs ce petit
>> montage fonctionne super bien... une seule fois !
>>
>> Je redémarre l'ordi, je branche le disque usb, ça fait la sauvegarde et
>> ça me l'éjecte, je reçois le mail qui me dit que c'est bon, et je
>> débranche le disque.
>>
>> Si je rebranche le disque : il est monté, OK
>> Mais le service sauvegarde ne se lance pas.
>> Si je fait un systemctl start sauvegarde.service : ça roule, la
>> sauvegarde se fait et le disque est démonté.
>>
>> Quelqu'un connaît-il l'incantation (magique pour moi à ce stade) qui
>> permettrait de réaliser plus d'une sauvegarde par jour ?
>>
>> merci
>>
>> Michel
>>
>
>
>
>