我有一个小脚本可以在我的远程机器上安装更新。
我想远程重启机器,如果机器重启了,继续执行其他命令。我现在做的是:
ssh root@myMachine << COMMANDS_ISSUED
###... Tasks
init 6
COMMANDS_ISSUED
sleep 180s
ssh root@myMachine << POST_REBOOT_COMMANDS
###.... More stuff
POST_REBOOT_COMMANDS
有没有更优雅的方法?比如每 5 秒 ping 一次机器,最多 4 分钟?我玩过几台启动时间不同的 Linux 机器,如果我的脚本在重启后立即继续,这可以节省相当多的时间。(注意:我不想在所有机器上并行执行,因为我想看看每台机器是否一切正常)
答案1
我会说 ping 该机器直到它启动为止。
while ! ping -c 1 192.168.1.1 &>/dev/null; do :; done
“c 1”每次将发送一个请求,因此每次循环发送一个请求。如果没有响应,ping 将返回 false,循环将继续。
循环体是空的 - 如果需要,您可以在那里放置一个简短的睡眠命令。否则,将使用冒号“:”,即 [无操作命令][1]。这是因为您不能有空的循环体。
答案2
你可以像这样定义一个 crontab:
@reboot script-to-execute