我有一个 systemd 服务,每次启动时都会将 mac 地址更改为 wifi 适配器。 Systemd 服务运行良好。当 wifi 适配器未插入 USB 时,我希望该服务不等待 1m 30sec。
系统服务([电子邮件受保护])在启动时很早就加载...Before=network-pre.target
我的目标是在网络管理器NetworkManager 服务启动之前更改MAC。
我怎样才能做到这一点?
[Unit]
Description=macchanger on %I
Wants=network-pre.target
Before=network-pre.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
[Service]
ExecStart=/usr/bin/macchanger -r %I
Type=oneshot
[Install]
WantedBy=multi-user.target
答案1
更改ExecStart=
并编写一个简单的包装脚本:
ExecStart=/usr/local/bin/macwrapper -r %I
并且,在 中/usr/local/bin/macwrapper
,类似 (未经测试!):
#!/bin/bash
# Set dev to your device name
dev="/dev/wifi"
# assume success
xit=0
if [[ -e "$dev" ]] ; then
/usr/bin/macchanger $1 $2
xit=$?
else
logger -t macwrapper "MAC Not changed no device $dev"
# Don't save logger's status, don't care
fi
exit $xit
读man bash test logger
。
答案2
你可以尝试:
- 在您的服务文件中使用
ConditionPathExists=
或ConditionPathExistsGlob=
,因此当 wifi 适配器未插入 USB 端口时,它会被跳过。 - 使用一个
*.path
单元并启用它,以便在 wifi 适配器插入 USB 端口时激活服务,而不是启用服务单元本身。 - 以上的组合。