让bash等待直到远程服务器kickstart完成(完成后它将创建一个文件)

时间:2019-09-27 12:44:45

标签: bash

我正在创建一个脚本来启动多个服务器。我快结束了,但是我希望bash脚本能够等到服务器kickstart完成。

完成kickstart并重新启动服务器后,将在远程kickstarted服务器上的“ / root / ”下创建一个文件,该文件称为“ kickstart-DONE < / strong>”

是否可以让bash脚本等到看到该文件,然后发布类似“完成!”的内容...?

我尝试搜索论坛和Internet,但可能搜索不正确,因为我找不到与此问题相关的内容。哎呀,我什至不知道这是否完全可能。

简而言之;我运行启动服务器的脚本。 kickstart完成后,它将在远程(-kickstarted)服务器上创建一个文件:kickstart-DONE。这将指示脚本,kickstart已完全完成并且可以使用服务器。如何使脚本意识到这一点?

我希望有人能理解我的意思并试图实现。...

谢谢。

//编辑

已解决!感谢科尔·蒂尔尼!

Cole Tierney提供了一些很好的答案,尽管它可以工作,但它不会等到服务器启动后才开始。我运行脚本来启动服务器,最后它正在运行提供的命令:

{{1}}

但是,自启动开始可能需要一些时间(取决于服务器的速度等,范围从15分钟到1小时)。该命令超时:

  

ssh:连接到主机100.125.150.175端口22:连接超时

有没有一种方法可以使脚本完全不超时并保持活动状态,直到服务器恢复运行或花费超过1个小时左右?

也许还有一种方法可以显示脚本仍处于活动状态?就像“等待... 5分钟过去了。” “等待……十分钟过去了。”等

因此,它为当前用户提供了一些不会死亡的信息?

1 个答案:

答案 0 :(得分:1)

您可以调用sleep直到文件存在:

while ! test -e /root/kickstart-DONE; do sleep 3; done; echo kickstart done

或休眠,直到服务器接受ssh连接。在本地运行以下netcat命令以检查服务器上的端口22何时打开(如果不需要额外的反馈,请删除echo closed;

while ! nc -zw2 $HWNODEIP 22; do echo closed; sleep 3; done

另一方面,在~/.ssh/config中设置主机条目很有用。您可以在此处添加各种ssh选项,而不必使ssh命令变得笨拙。可以在主机条目之外添加所有主机条目共有的选项。有关其他选项,请参见man ssh_config。这是一个示例(server1可以是任何值,将替换为服务器的ip地址):

Host server1
    Hostname <server ip>
    User root

然后使用它:

ssh server1 'some command'

请注意,出于安全原因,许多系统不允许root用户进行ssh连接。您可能要考虑添加其他用户作为kickstart的东西。如果需要root用户访问权限,请将此用户添加到sudoers中。