Re: [systemd] Service conditionné sur l'existence d'un fichi…

Page principale

Répondre à ce message
Auteur: Patrice Karatchentzeff
Date:  
À: Edgar Bonet
CC: Liste Guilde
Anciens-sujets: [systemd] Service conditionné sur l'existenced'un fichier
Sujet: Re: [systemd] Service conditionné sur l'existence d'un fichier
Salut Edgar

Un truc de bourrin si jamais c'est bogué... Tu lances un second
service qui monitore l'absence de connexion et qui kille les deux
unités actives...

C'est le genre de truc qui finit mal avec les années :)

PK


Le jeu. 9 nov. 2023 à 16:48, Edgar Bonet <guilde@???> a écrit :
>
> Bonjour la Guilde !
>
> J'ai un problème que j'essaye de résoudre avec systemd, mais je m'y
> perds dans la doc. :-( Peut-être quelqu'un ici peut m'aider ? Peut-être
> que systemd n'est pas le bon outil pour ce que je veux faire ?
>
> J'ai un instrument qui se pilote via une liaison série émulée sur USB
> (il a un FTDI dedans), et un Raspberry avec un script qui accède à cet
> instrument. Je voudrais que ce script tourne si et seulement si
> l'instrument est branché. Le script doit donc être :
>
> – lancé au démarrage si l'instrument est déjà branché
>
> – tué quand l'instrument est débranché
>
> – (re)lancé quand l'instrument est (re)branché
>
> Je me suis dit que systemd, sur le papier du moins, semblait être
> l'outil ad doc pour gérer le cycle de vie d'un tel script. J'ai essayé
> d'en faire un service conditionné par l'existence d'un fichier :
>
> /usr/local/bin/rem_pulser.sh (le script en question):
>     #!/bin/bash
>     port=/dev/serial/by-id/usb-FTDI_UM232R_USB__-__Serial_A156DVPL-if00-port0
>     stty -F $port raw -echo 115200
>     nc -k -n -l -p 1234 < $port > $port

>
> /etc/systemd/system/rem_pulser.path (surveillance du fichier):
>     [Unit]
>     Description=Monitor the existence of the pulser USB port

>
>     [Path]
>     PathExists=/dev/serial/by-id/usb-FTDI_UM232R_USB__-__Serial_A156DVPL-if00-port0

>
>     [Install]
>     WantedBy=multi-user.target

>
> /etc/systemd/system/rem_pulser.service (service gérant le script):
>     [Unit]
>     Description=Pulser through IP
>     After=network.target

>
>     [Service]
>     Type=simple
>     ExecStart=/usr/local/bin/rem_pulser.sh

>
>     [Install]
>     WantedBy=multi-user.target

>
> Le fichier surveillé est un lien symbolique vers
> /dev/ttyUSB<quelque-chose>, qui apparaît et disparaît quand on branche
> ou on débranche l'instrument.
>
> Après avoir fait « enable » et « start » sur les deux unités (avec
> l'instrument branché), systemd me dit qu'elles sont actives, et qu'il y
> a un lien Triggers/TriggeredBy entre les deux. Jusque là ça a l'air
> bon. Seulement, si je débranche l'instrument, le lien symbolique
> disparaît, et pourtant les deux unités restent actives. Si je rebranche,
> le lien symbolique réapparaît (pointant vers un autre /dev/ttyUSB*),
> mais le script ne fonctionne pas (il a toujours l'ancien /dev/ttyUSB*
> d'ouvert).
>
> Est-ce que quelqu'un aurait une idée pour résoudre ce problème ?
>
> À+,
>
> Edgar.
>
> PS : J'ai trouvé un ticket de systemd qui ne m'apporte pas de
> l'optimisme...
>
>     RFE: systemd.path should support deactivation
>     https://github.com/systemd/systemd/issues/3642

>



-- 
      |\      _,,,---,,_           Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff@gmail.com
     |,4-  ) )-,_. ,\ (  `'-'
    '---''(_/--'  `-'\_)