Bonjour,
j'ai laissé passer un bon moment, mais j'ai réussi à m'y remettre :-)
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:
==> pour trouver tous les attributs possibles, la commande :
udevadm info -a -p /sys/block/sdX
ou
udevadm info --name=/dev/sdd1 --attribute-walk
est vraiment complète : elle sort tous les attributs bien écrits, y'a
plus qu'à recopier ceux qui nous intéressent.
>
> $ 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
Je n'ai pas essayé cette méthode, car l'autre fonctionne très bien.
> $ 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".
> |||
Tel que tu l'as écrit c'es plutôt déconseillé :-)
C'est une affectation, pas un test (ça m'a pris la tête un moment
d'ailleurs :-)
Il faut écrire :
ENV{SYSTEMD_WANTS}="mon_service.service"
> Pour umount, j'image qu'un "umount /mnt/sauvegarde" en ExecStop du
> service pourrait faire l'affaire.
Oui, j'ai rajouté ça. Je lance le script qui démonte en ExecStopPost et
ça roule.
J'ai splitté le script en deux :
un qui lance la sauvegarde,
la fin qui démonte le disque (appelée par ExecStopPost), et ça a l'air
plutôt robuste :-)
Merci
Michel
>
> 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
>>
>
>
>
>