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

项目启动脚本想要判断当前网络环境(内网是否连通),于是加了如下脚本代码:

    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之前)调用改函数。


你可能感兴趣的:(c,linux,脚本,阻塞,域名解析)