Я использую Arch Linux, и у меня есть правило udev, которое запускает службу при вставке устройства. В этом случае он устанавливает соединение при подключении модема 3G.
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="netcfg@wvdial.service"
Однако, если устройство будет удалено, systemd не остановит службу, и, следовательно, при повторном подключении она не запустит службу, поскольку она уже запущена.
Мне нужно соответствующее правило udev, которое запускается при удалении устройства, чтобы остановить службу.
Обновить
Используя ответ ниже, теперь у меня есть следующее правило udev
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.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
Я использую netcfg-wvdial
от AUR, чтобы сделать набор номера.
StopWhenUnneeded=true
вместо этогоBindsTo
иAfter
StopWhenUnneeded=true
работе, но я думаю, что она уже давно исправлена.