我正在尝试为 Debian 上的 hostapd 编写一个单元文件。
hostapd 守护进程似乎需要在运行之前启动关联 Wifi 接口的接口,否则将使用 SEGV。
我已经尝试过network-online.target,但仍然得到SEGV。我认为这是因为 network-online.target 只需要查看任何接口,并且在 Wifi 接口准备好让 hostapd 正常工作之前其他接口就会出现。
让服务在启动之前等待特定接口启动的最佳方法是什么?
答案1
从systemd 219开始,你可以systemd-networkd-wait-online
直接使用systemd的工具,带有--interface
参数指定要等待的接口。例如:
ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE
但是,有一个警告。该工具需要systemd-networkd
运行,即使它在您的配置中不执行任何操作。另一方面,从相同的 systemd 219 开始,systemd-networkd
可通过套接字激活并在空闲时自动退出。因此,您所需要做的就是拉入其插座。
将它们放在一起,对单元文件的修改将如下所示(替换$IFACE
为您想要的接口):
[Unit]
Requires=systemd-networkd.socket
After=systemd-networkd.socket
...
[Service]
ExecStartPre=/usr/lib/systemd/systemd-networkd-wait-online --interface=$IFACE
ExecStart=/usr/bin/hostapd ...
...