我有一个在启动时运行的 debian 软件包。
我正在使用 upstart,我想我需要添加依赖项到新贵配置:
start on someProgram
我不确定哪个程序,但我没有使用network-manager
,它已被禁用。我正在做这样的事情:
ethernet=$(ifconfig -a | grep Ethernet | grep ^e | cut -d' ' -f1)
wifi=$(ifconfig -a | grep wl | cut -d' ' -f1)
ping -I $ethernet -c 1 8.8.8.8 \
|| ping -I $wifi -c 1 8.8.8.8 \
|| echo "not online"
问题是ifconfig
并不总是显示$wifi
界面,因为程序在启动过程中启动得太早。
ping -I $ethernet -c 1 8.8.8.8
该成功的时候也失败了。
如果我sleep 30
这样做的话ping
,效果很好。
有谁知道我应该等待什么软件包才能使其按预期工作?
我在嵌入式设备上使用 Ubuntu 14.04。
3.0.36+ #16 SMP PREEMPT Tue Oct 31 19:17:57 EDT 2017 armv7l armv7l armv7l GNU/Linux
我以为我已经有了答案:
我发现可以直接引用网络接口而不是包:
start on (local-filesystems and net-device-up IFACE!=lo)
我仍然想针对我的情况稍微改进一下。
因为我宁愿等待 wlan 而不是 eth,但我不确定是否可以使用通配符,例如:
IFACE=wlan*
但似乎这并没有等待接口可用,ifconfig
而是等待该接口具有活动的互联网连接。
答案1
我最终找到了使用新贵预启动脚本的解决方法:
pre-start script
while [ -z "$(ifconfig | grep wlan)" ]
do
sleep 1
done
sleep 5
end script