如何减少等待systemd服务的时间?

如何减少等待systemd服务的时间?

我有一个 systemd 服务,每次启动时都会更改 mac 地址到 wifi 适配器。 Systemd 服务运行良好。当 wifi 适配器未插入 USB 时,我希望该服务不等待 1m 30sec。

我怎样才能做到这一点?

[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

multi-user.target首先不要将该单元作为依赖项启动。相反,将其作为依赖项启动设备本身的。Udev 规则可用于向设备添加 Wants= 依赖项:

/etc/udev/rules.d/90-macchanger.rules
ACTION!="remove", SUBSYSTEM=="net", KERNEL=="wlan*", ENV{SYSTEMD_WANTS}+="macchanger@$name.service"

这将导致虚拟sys-…-wlan0.device[电子邮件受保护],而不是具有相同的 multi-user.target ,因此该服务仅在设备出现时启动。

但如果你这样做,你就不会需要不再是 .service – 您可以直接从 udev 规则运行 macchanger。 (对于长时间运行的服务来说是不可能的,但对于小型助手来说就很好。)

/etc/udev/rules.d/90-macchanger.rules
ACTION!="remove", SUBSYSTEM=="net", KERNEL=="wlan*", RUN+="/bin/macchanger -r $name"

事实上这将是更好的与使用服务相比,它保证在 udev 宣布设备“准备好”使用其他服务之前完成 MAC 更改。

相关内容