我正在创建一个脚本来启动多个服务器。我快结束了,但是我希望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分钟过去了。” “等待……十分钟过去了。”等
因此,它为当前用户提供了一些不会死亡的信息?
答案 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可以是任何值,将
Host server1
Hostname <server ip>
User root
然后使用它:
ssh server1 'some command'
请注意,出于安全原因,许多系统不允许root用户进行ssh连接。您可能要考虑添加其他用户作为kickstart的东西。如果需要root用户访问权限,请将此用户添加到sudoers中。