我正在运行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
我正在使用AUR的netcfg-wvdial进行拨号.
解决方法:
您的问题可以单独使用systemd解决,只需指定您的服务Requires,或者甚至更好地指定给定设备BindsTo.
引用:
您只需编辑您的服务文件,如下所示.
[Unit]
BindsTo=.device
After=.device
注意:要获取所有可用设备单元文件的列表,请使用systemctl list-units –all –full | grep“.device”
标签:linux,systemd,udev
来源: https://codeday.me/bug/20190809/1629917.html