您的位置:首页 > 理论基础 > 计算机网络

启动脚本中避免目标地址为域名的网络连接

2015-06-13 23:04 369 查看
项目启动脚本想要判断当前网络环境(内网是否连通),于是加了如下脚本代码:
ping -c1 -W1 xxx.xxx.com > /dev/null
if [ $? = 0 ]; then
我们的项目启动脚本安装到/etc/init.d/下面了,因此会随服务器重启而启动。于是就出现了下面的情景: 某些服务器启动花了几十分钟时间才启动完成。 这部分服务器在启动的时候网络不通。
解决方法将脚本改成如下:
ping -c1 -W1 172.xxx.xxx.xx > /dev/null
if [ $? = 0 ]; then
将脚本中连接测试的目标从域名改成了IP,这个问题就解决了。

原因:
域名解析的过程阻塞的,即请求域名服务器解析目标域名为IP的操作是阻塞的,当服务器无网络,则网络请求阻塞在域名解析的步骤。

以上的问题同样可能会出现在linux c函数gethostbyname(hostname)中,同样,也应该避免进程建立之前(启动完成判断,比如建立pid之前)调用改函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息