Estou executando o Arch Linux e tenho uma regra do udev que inicia um serviço quando um dispositivo é inserido. Nesse caso, ele disca uma conexão quando um modem 3G é conectado.
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
No entanto, se o dispositivo for removido, o systemd não interromperá o serviço e, portanto, quando for conectado novamente, não iniciará o serviço, pois já está em execução.
O que eu preciso é de uma regra udev correspondente que seja executada quando o dispositivo for removido para interromper o serviço.
Atualizar
Usando a resposta abaixo, o que tenho agora é a seguinte regra do udev
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"
com o seguinte arquivo de serviço (que foi basicamente copiado e colado no arquivo de serviço 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
Estou usando netcfg-wvdial
do AUR para fazer a discagem.
StopWhenUnneeded=true
em vezBindsTo
eAfter
StopWhenUnneeded=true
trabalho, mas acredito que já foi corrigido há um bom tempo.