Estoy ejecutando Arch Linux, y tengo una regla udev que inicia un servicio cuando se inserta un dispositivo. En este caso, marca una conexión cuando se conecta un módem 3G.
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
Sin embargo, si se retira el dispositivo, systemd no detendrá el servicio y, por lo tanto, cuando se vuelva a enchufar, no lo iniciará, ya que ya se está ejecutando.
Lo que necesito es una regla udev coincidente que se ejecuta cuando se retira el dispositivo para detener el servicio.
Actualizar
Usando la respuesta a continuación, lo que ahora tengo es la siguiente regla de udev
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"
con el siguiente archivo de servicio (que básicamente se copió y pegó del archivo de servicio netcfg:
[Unit]
Description=Netcfg networking service for Vodafone Dongle
Before=network.target
Wants=network.target
BindsTo=dev-gsmmodem.device
After=dev-gsmmodem.device
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/netcfg check-iface wvdial
ExecStop=-/usr/bin/netcfg down wvdial
KillMode=none
[Install]
WantedBy=multi-user.target
Estoy usando netcfg-wvdial
de AUR para hacer la marcación.
StopWhenUnneeded=true
en su lugarBindsTo
yAfter
StopWhenUnneeded=true
funcionara, pero creo que se ha solucionado durante bastante tiempo.