Estou executando o Arch Linux e tenho uma regra do udev que inicia um serviço quando um dispositivo é inserido. Neste caso, 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 parará o serviço e, portanto, quando ele for conectado novamente, ele não iniciará o serviço, pois ele já está em execução.
O que eu preciso é de uma regra do udev correspondente que seja executada quando o dispositivo for removido para interromper o serviço.
Atualizar
Usando a resposta abaixo, o que eu 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 do 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.