Ich verwende Arch Linux und habe eine udev-Regel, die einen Dienst startet, wenn ein Gerät eingefügt wird. In diesem Fall wird eine Verbindung gewählt, wenn ein 3G-Modem angeschlossen ist.
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
Wenn das Gerät jedoch entfernt wird, stoppt systemd den Dienst nicht und startet den Dienst daher nicht, wenn es erneut angeschlossen wird, da es bereits ausgeführt wird.
Was ich brauche, ist eine übereinstimmende udev-Regel, die ausgeführt wird, wenn das Gerät entfernt wird, um den Dienst zu beenden.
Aktualisieren
Mit der folgenden Antwort habe ich jetzt die folgende udev-Regel
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"
mit der folgenden Servicedatei (die im Wesentlichen aus der netcfg-Servicedatei kopiert und eingefügt wurde:
[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
Ich benutze netcfg-wvdial
von der AUR, um das Wählen zu machen.
StopWhenUnneeded=true
stattdessenBindsTo
undAfter
StopWhenUnneeded=true
, aber ich glaube, dass er schon eine ganze Weile behoben wurde.