一个bash shell程序,等待列表中的所有服务器启动,然后运行启动脚本

时间:2019-01-05 18:31:37

标签: linux shell

我正在尝试自动运行在12个Linux 7服务器的网格上运行的应用程序(重新启动后)。

这12台服务器以随机顺序重新启动。

所有服务器都必须先运行,然后才能启动位于12台服务器上的应用程序。

我想做的是测试所有12台Linux 7服务器是否都已启动,然后在所有12台服务器都已启动时,继续执行命令的启动顺序。

所有12个服务器均使用ssh密钥设置。

cat serverlist.txt      10.0.0.6      10.0.0.7      10.0.0.8      10.0.0.9      ...      10.0.0.18

我想对服务器执行ping操作,然后等到ping操作成功后再移至下一个IP地址。

我很抱歉我的问题。

如何编写此代码?

从IP列表文件的第一行读取。 ping第一个IP直到成功,然后ping其他IP地址(一次一个),直到所有12个都成功。

然后,运行命令以在12台服务器的网格上启动应用程序。

问题:如何在bash shell中进行编码。

2 个答案:

答案 0 :(得分:1)

内部循环可以很简单

while ! ssh "${connection_string}" -o ConnectTimeout=5 true
do
    sleep 0.5
done

这将执行一条简单命令,并在两次重试之间等待0.5秒。

答案 1 :(得分:0)

for i in `cat /home/Startup/serverlist.txt`
do
    ssh ${i} -o ConnectTimeout=5 true
    while test $? -gt 0
    do
        ssh ${i} -o ConnectTimeout=5 true
    done
done
exit  

如果ssh工作正常,则服务器仍处于活动状态,此外,使用超时是加快脚本执行速度的更好方法。如果脚本完成,则意味着所有服务器都已启动并且正在响应。