我正在运行Arch,我有一个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来做拨号。
发布于 2013-09-08 21:31:23
您的问题可能仅使用systemd解决,只需指定您的服务需要,甚至更好的是,指定给定设备的BindsTo。
引用:
如果另一个[必需/绑定]单位被停用或激活失败,则此单位[服务]将被停用
您只需要像下面这样编辑您的服务文件。
[Unit]
<...>
BindsTo=<DEVICE UNIT HERE>.device
<...>
After=<DEVICE UNIT HERE>.device注意:要获取所有可用设备单元文件的列表,请使用systemctl list-units --all --full | grep ".device"
https://unix.stackexchange.com/questions/63232
复制相似问题