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

Page principale

Répondre à ce message
Auteur: Edgar Bonet
Date:  
À: guilde
Sujet: Re: [systemd] Service conditionné sur l'existence d'un fichier
Bonjour !

Raphaël Dorado a écrit :
> udevadm monitor    \
>     | egrep --line-buffered "UDEV.+sdd1"    \
>     | while $(true)
>     do
>         read event
>         event=$(echo "$event" | cut -d' ' -f4 )
>         echo $event
>     done

>
> $event est 'add'     quand j'insère la clé
> $event est 'remove'    quand je retire la clé


Tiens, intéressant ! De mon côté, je ne peux pas grepper le nom complet
du device, car il change à l'occasion (ttyUSB0 ou ttyUSB1). Mais je vois
que je peux demander à udevadm de ne me montrer que les événements UDEV
du sous-système tty. J'ai fait un essai en branchant un câble FTDI (vu
comme /dev/ttyUSB0), en ouvrant le port en écriture, et en tapant

    udevadm monitor -u -s tty


Quand je débranche et rebranche le câble, je vois ceci :

    UDEV  [344267.700283] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.3/1-5.3:1.0/ttyUSB0/tty/ttyUSB0 (tty)
    UDEV  [344270.921765] add      /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.3/1-5.3:1.0/ttyUSB1/tty/ttyUSB1 (tty)


Je crois que je vais essayer de me baser sur ça. Ci-dessous la version
préliminaire du script que je vais essayer.

Merci !

Edgar.

-- 8< ------------------------------------------------------------------
#!/bin/bash

port_id=usb-FTDI_UM232R_USB__-__Serial_A156DVPL-if00-port0
port=/dev/serial/by-id/$port_id
nc_pid="" # PID of netcat

# Start the netcat process and record its PID.
start_netcat() {
    stty -F $port raw -echo 115200
    nc -k -n -l -p 1234 < $port > $port &
    nc_pid=$!
}


# Start or stop netcat, as required.
refresh() {
    # Start netcat when the port shows up.
    if [ -e "$port" ]; then
        if [ -n "$nc_pid" ]; then
            echo "killing netcat (unexpectedly alive)"
            kill $nc_pid
        fi
        echo "starting netcat"
        start_netcat
    fi


    # Stop netcat if it is running and the port vanishes.
    if [ ! -e "$port" -a -n "$nc_pid" ]; then
        echo "stopping netcat"
        kill $nc_pid
        nc_pid=""
    fi
}


# Initial setup, in case the port is already here.
refresh

# Watch for udev adding or removing ttys.
udevadm monitor -u -s tty | grep --line-buffered '(tty)' | \
while true; do
    read line  # read and discard
    refresh
done