我想使用 systemd 启动 busybox udhcpd 服务。
我有一个简单的 /etc/udhcpd.conf 文件:
start 192.168.8.20 #default: 192.168.0.20
end 192.168.8.254 #default: 192.168.0.254
interface wlan0
这是我的 /lib/systemd/system/udhcpd.service
[Unit]
Description=DHCP Service
[Service]
ExecStart=/usr/sbin/udhcpd /etc/countx-udhcpd.conf
ExecStartPre=/usr/bin/ip-up.sh
[Install]
WantedBy=multi-user.target
这是我的 /usr/bin/ip-up.sh
#!/bin/sh
ip addr add 192.168.8.1 dev wlan0
ip link set wlan0 up
当我手动运行脚本时,一切都正常运行。
但是当我使用 systemd 运行脚本时,它失败了。
systemctl start udhcpd
这是有效的:
/usr/bin/udhcpd-ip-up.sh
/usr/sbin/udhcpd /etc/countx-udhcpd.conf
有人能用 systemd 来运行它吗?
答案1
我做了一些修改后它就可以工作了。
首先,我必须在从 systemd 启动 udhcpd 时使用 -f 标志。这会将 udhcpd 置于前台。虽然这毫无意义,但它确实有效。
其次,我需要等待网络启动后才能运行此程序。
以下是我的修复方法,可以使 /lib/systemd/system/udhcpd.service 正常运行
[Unit]
Description=DHCP Service
# wait for network to come up before we run
After=network.target
[Service]
# -f means foreground--not sure why, but it works now
ExecStart=/usr/sbin/udhcpd -f /etc/countx-udhcpd.conf
ExecStartPre=/usr/bin/udhcpd-ip-up.sh
[Install]
WantedBy=multi-user.target
以上所有其他文件都是必需的。它们按原样正常工作。