Sto eseguendo Arch Linux e ho una regola udev che avvia un servizio quando viene inserito un dispositivo. In questo caso, compone una connessione quando è collegato un modem 3G.
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="netcfg@wvdial.service"
Tuttavia, se il dispositivo viene rimosso, systemd non interromperà il servizio e, quindi, quando viene ricollegato, non avvierà il servizio, poiché è già in esecuzione.
Ciò di cui ho bisogno è una regola udev corrispondente che viene eseguita quando il dispositivo viene rimosso per interrompere il servizio.
Aggiornare
Usando la risposta qui sotto, quello che ho ora è la seguente regola udev
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"
con il seguente file di servizio (che è stato sostanzialmente copiato e incollato dal file di servizio 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
Sto usando netcfg-wvdial
da AUR per fare la composizione.