考虑以下脚本:
for host in $(get-all-hosts)
do
(restart-server $host; wait-for-server-to-come-up $host) &
done
正如您可能猜到的那样,restart-server
重新启动服务器并wait-for-server-to-come-up
阻止命令直到服务器启动(例如,grep -m 1 'server up' <(tail -f /path/to/log)
)。
该脚本基本上同时重新启动所有服务器。我很好奇修改此脚本以在某些固定数量的服务器后停止并等待一台服务器启动后再继续下一次重新启动的最简单方法是什么,以便在任何给定的情况下最多有 4 台服务器停机时间。我知道这样做的一种方法是简单地以 4 个块重新启动并等待每个块中的所有 pid,但我希望做一些更聪明的事情并不难。
一些从头开始的解决方案:
第二次尝试,使用丹尼斯链接中的一些想法。几乎是香草 Bash 解决方案的理想选择:
mkfifo mfifo
exec 3<>mfifo
echo >&3
echo >&3
echo >&3
for host in $(get-all-hosts)
do
read
(restart-server $host; wait-for-server-to-come-up $host; echo >&3) &
done <&3
我对这个解决方案最大的抱怨是它假设还没有一个名为 mfifo 的命名队列已经在使用中。除此之外,我没有看到任何问题,据我所知,它完全按照预期工作。