J'utilise Arch Linux et j'ai une règle udev qui démarre un service lorsqu'un périphérique est inséré. Dans ce cas, il établit une connexion lorsqu'un modem 3G est branché.
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="netcfg@wvdial.service"
Cependant, si le périphérique est supprimé, systemd n'arrêtera pas le service, et donc quand il sera rebranché, il ne démarrera pas le service, car il est déjà en cours d'exécution.
Ce dont j'ai besoin, c'est d'une règle udev correspondante qui s'exécute lorsque le périphérique est supprimé pour arrêter le service.
Mise à jour
En utilisant la réponse ci-dessous, ce que j'ai maintenant est la règle udev suivante
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"
avec le fichier de service suivant (qui a été essentiellement copié et collé à partir du fichier de service 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
J'utilise netcfg-wvdial
de l'AUR pour faire la numérotation.