我正在编写一个 shell 脚本,用于启动以太网接口(配置为 DHCP)以确定它是否已连接到网络。如果没有,我希望能够及时(在几秒钟内)报告没有连接。不幸的是,在没有连接的情况下,ifup 似乎要等待几分钟才会超时,而手册页没有提到超时参数。有没有办法在几秒钟后停止它?
这是在 Ubuntu Server 11.10 上;NetworkManager 尚未使用。
答案1
您没有说您使用什么进行通知。
[[ -n "$(ifconfig | grep '192.*' )" ]] || echo "down"
将“192”更改为您的网络前缀(192.168.xy 是最常见的)。
将“echo“down””更改为您的通知。
以合理的间隔从 cron 运行该命令。
也许是
[[ -n "$(ifconfig | grep '192.*' )" ]] || dhclient eth0
每分钟左右运行一次?
答案2
我终于找到了办法。
事实证明,由于我真正想要做的是检查链接,所以我ifup
根本不需要。相反,我可以使用ethtool
(尽管必须先安装它),如下所示:
connected=$(ethtool eth0 | awk '/Link detected:/ { print $3 }')
但是,如果我确实需要检查ifup
,我可以使用后台进程和$!
shell 变量。如果我只是想检查超时后它是否仍在运行,我可以这样做:
ifup eth0 &
sleep 5
if ps -p $! | grep -q "$!"; then
connected='no'
kill $!
else
connected='yes'
fi
如果我想捕获 的输出ifup
,最好的办法可能是将其重定向到临时文件。(我研究了命名管道,但我不认为它们适用于此目的;ifup
会阻塞直到另一个进程读取其输出。)