我正在运行 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 进行拨号。
我在小型 SBC 中做了很多 SSH 工作,并且经常运行sudo systemctl reboot或sudo systemctl poweroff
我的 SSH 会话经常在我没有注意到的情况下断开连接,我不小心重启了自己的机器。有什么方法可以防止重新启动和关机,或者甚至更好地在我发出这些命令时强制我输入 yes?
我知道我可以为这些命令取别名并重新训练我的大脑以停止输入这些命令,但这并不理想。此外,我仍然希望能够通过 sudo 运行 systemctl 的其余命令,所以我不想阻止整个 systemctl 在 sudo 下运行。