项目启动脚本想要判断当前网络环境(内网是否连通),于是加了如下脚本代码:
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之前)调用改函数。
原文地址:http://yunzhongshu.blog.51cto.com/8571602/1661662