Bash 重新启动一组服务器,在重新启动过程中只关闭少数服务器
考虑以下脚本:Bash 重新启动一组服务器,在重新启动过程中只关闭少数服务器,bash,Bash,考虑以下脚本: for host in $(get-all-hosts) do (restart-server $host; wait-for-server-to-come-up $host) & done 正如您可能猜到的,restart server重新启动服务器,命令等待服务器启动阻塞,直到服务器启动(例如,grep-m1'server up'并行工具(在Ubuntu/Debianmoreutils包中)可能可以在这里提供帮助;如果您重新编写重新启动服务器工具以阻止,直到服务
for host in $(get-all-hosts)
do
(restart-server $host; wait-for-server-to-come-up $host) &
done
正如您可能猜到的,
restart server
重新启动服务器,命令等待服务器启动
阻塞,直到服务器启动(例如,grep-m1'server up'并行
工具(在Ubuntu/Debianmoreutils
包中)可能可以在这里提供帮助;如果您重新编写重新启动服务器
工具以阻止,直到服务器恢复,您可以如下方式运行脚本:
parallel -j 4 restart-server -- $(get-all-hosts)
当然,如果四台服务器没有恢复,整个过程就会停止。也许这是可取的。
xargs
具有类似于parallel
的并行功能:
echo $(get-all-hosts) | tr ' ' '\n' | xargs -P 4 -n 1 ./blocking-restart
..如果
阻塞重启
需要获取单个服务器的名称,请重新启动它并等待它完成。注意tr
将每个主机放在自己的行上,这是xargs所期望的。添加停机主机计数器和内部while循环。当服务器停机>x时,对停机主机进行采样,直到服务器停机fifodir=$(mktemp-d-t fifodir.XXXXXXXXX);mkfifo“$fifodir/fifo”
。只需记住trap'rm-rf“$fifodir”退出
,感谢指针。我对如何使用仍然只使用基础知识的简单Bash脚本执行此操作感兴趣,因为这将增加我对Bash/Unix中可实现的功能的一般理解。
echo $(get-all-hosts) | tr ' ' '\n' | xargs -P 4 -n 1 ./blocking-restart