如何在网络服务启动之前更改 mac

如何在网络服务启动之前更改 mac

我有一个 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

你可以尝试:

  1. 在您的服务文件中使用ConditionPathExists=ConditionPathExistsGlob=,因此当 wifi 适配器未插入 USB 端口时,它会被跳过。
  2. 使用一个*.path单元并启用它,以便在 wifi 适配器插入 USB 端口时激活服务,而不是启用服务单元本身。
  3. 以上的组合。

相关内容