运行 网络连接后的脚本
Run script after network is connected
将文件放在/etc/network/if-up.d/
中,您可以在界面打开时调用脚本。但这并不意味着已经建立了互联网连接。这种情况经常发生在我身上。例如下面的代码
#!/bin/sh
# Don't bother to do anything for lo.
if [ "$IFACE" = lo ]; then
exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
exit 0
fi
# we only care about inet and inet6.
case $ADDRFAM in
inet|inet6|NetworkManager)
;;
*)
exit 0
;;
esac
/path/to/my/script
exit 0
一出现界面就调用脚本。但大多数情况下,我仍然没有网络连接,所以我的脚本失败,因为它试图连接到网络。
我做错了什么?
当接口启动时,并不意味着您完全可以连接。例如,如果接口配置为从 DHCP 获取 IP,则 IP 配置需要几秒钟。
要检查 Internet 连接,您可以使用 nslookup
或 dig
查询已知网页的 IP。如果你得到一个有效的答案,你可以继续。否则,等待并在中止前重复一定次数的重试。
现在为什么要使用 DNS 系统来检查 Internet 连接?我认为这是检查所有网络方面是否正确配置(IP 地址、路由、DNS 等)的最简单方便的方法。
将文件放在/etc/network/if-up.d/
中,您可以在界面打开时调用脚本。但这并不意味着已经建立了互联网连接。这种情况经常发生在我身上。例如下面的代码
#!/bin/sh
# Don't bother to do anything for lo.
if [ "$IFACE" = lo ]; then
exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
exit 0
fi
# we only care about inet and inet6.
case $ADDRFAM in
inet|inet6|NetworkManager)
;;
*)
exit 0
;;
esac
/path/to/my/script
exit 0
一出现界面就调用脚本。但大多数情况下,我仍然没有网络连接,所以我的脚本失败,因为它试图连接到网络。
我做错了什么?
当接口启动时,并不意味着您完全可以连接。例如,如果接口配置为从 DHCP 获取 IP,则 IP 配置需要几秒钟。
要检查 Internet 连接,您可以使用 nslookup
或 dig
查询已知网页的 IP。如果你得到一个有效的答案,你可以继续。否则,等待并在中止前重复一定次数的重试。
现在为什么要使用 DNS 系统来检查 Internet 连接?我认为这是检查所有网络方面是否正确配置(IP 地址、路由、DNS 等)的最简单方便的方法。