如何减少 ifup 的超时时间?

如何减少 ifup 的超时时间?

我正在编写一个 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会阻塞直到另一个进程读取其输出。)

相关内容