我想编写一个依赖于 USB WiFi 适配器的 systemd 服务。它不需要在设备插入时启动,只要在设备未插入时不启动即可。我该如何实现这一点?
systemd 配置文件位于[电子邮件保护]格式。它使用占位符%i
。所以我尝试将其添加到单元文件中:
[Path]
PathExists = /dev/%i
其中%i
应该是类似这样的内容wlan0
。不幸的是,这被完全忽略了,所以我可能不理解本节的正确用法。
我也尝试过:
[Unit]
....
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
我从某个地方(我忘记在哪里)捡到它,而且它也不起作用。
答案1
你需要结合udev和systemd。
在 /etc/udev/rules.d/95-mywifi.rules 中为 udev 添加新规则,如下所示:
ACTION=="add", ATTRS{idVendor}=="...", ATTRS{idProduct}=="...", SYMLINK=="mywifi", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
(您必须用适合您的加密狗的供应商和产品代码替换这些点)。
现有的[电子邮件保护]是:
# cat /lib/systemd/system/netctl-auto\@.service
[Unit]
Description=Automatic wireless network connection using netctl profiles
Documentation=man:netctl.special(7)
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Before=network.target
Wants=network.target
[Service]
ExecStart=/usr/bin/netctl-auto start %I
ExecStop=/usr/bin/netctl-auto stop %I
RemainAfterExit=yes
Type=forking
[Install]
WantedBy=multi-user.target
为了实现此功能,你必须设置一个网控个人资料,请参阅Arch Linux 维基看看如何做到这一点。