Re: Système D

Top Page

Reply to this message
Author: nicolas michon
Date:  
To: guilde
New-Topics: Système D
Subject: Re: Système D
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
>