shell脚本 - 当ping失败时循环停止

时间:2017-07-12 16:50:07

标签: linux shell timeout ping centos5

我正在尝试编写一个shell脚本来ping每个指定文件中列出的服务器并获得正常运行时间。预期的行为是,如果在$ {TIMEOUT}秒后未到达服务器,则脚本将停止尝试ping该服务器并继续执行列表中的下一个服务器。但是,当服务器的ping超时时,程序将完全停止,而不是仅仅移动到列表中的下一个服务器。我该如何解决这个问题?

以下是相关的代码段($ {ALS_HOSTS}是要ping的服务器列表):

while read hostid
do
        ping -c ${NUM_PING_PACKETS} ${hostid}
        if ping -w ${TIMEOUT} -c ${NUM_PING_PACKETS} ${hostid} | grep ' from' 2>/dev/null 1>&2 # check for output
        then
                ssh ${hostid} uptime > ${WORKDIR}/${hostid} &
        fi
done  < ${ALS_HOSTS}

(此脚本将在CentOS 5计算机上运行,​​此时无法升级或重新配置)

1 个答案:

答案 0 :(得分:1)

这可能是因为sshwhile read循环共享stdin,并将所有数据排出以将其发送到远程主机。

使用ssh -n来防止这种情况:

ssh -n ${hostid} uptime > ${WORKDIR}/${hostid} &