cra*_*ick 13 linux udev systemd
我正在运行 Arch Linux,我有一个 udev 规则,它在插入设备时启动服务。在这种情况下,它会在插入 3G 调制解调器时拨打连接。
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="netcfg@wvdial.service"
Run Code Online (Sandbox Code Playgroud)
但是,如果设备被移除,systemd 不会停止该服务,因此当它再次插入时,它不会启动该服务,因为它已经在运行。
我需要的是一个匹配的 udev 规则,该规则在移除设备以停止服务时运行。
使用下面的答案,我现在拥有的是以下 udev 规则
KERNEL=="ttyUSB*", SYMLINK=="gsmmodem", TAG+="systemd", ENV{SYSTEMD_WANTS}="vodafone.service"
Run Code Online (Sandbox Code Playgroud)
使用以下服务文件(基本上是从 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
Run Code Online (Sandbox Code Playgroud)
我正在使用netcfg-wvdialAUR 进行拨号。
bru*_*tra 12
您的问题可以单独使用 systemd 解决,只需指定您的服务Requires或者更好的是BindsTo给定设备。
引用:
“如果其他[必需/绑定]单位之一被停用或激活失败,则该单位[服务]将被停用”
你只需要像下面这样编辑你的服务文件。
[Unit]
<...>
BindsTo=<DEVICE UNIT HERE>.device
<...>
After=<DEVICE UNIT HERE>.device
Run Code Online (Sandbox Code Playgroud)
注意:要获取所有可用设备单元文件的列表,请使用 systemctl list-units --all --full | grep ".device"
| 归档时间: |
|
| 查看次数: |
9312 次 |
| 最近记录: |