次のスクリプトについて考えてみます。
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)
。
このスクリプトは、基本的にすべてのサーバーを同時に再起動します。このスクリプトを変更して、一定数のサーバーの後で停止し、1つのサーバーが起動するのを待ってから次の再起動に進み、たとえば最大4台のサーバーがダウンするようにする最も簡単な方法を知りたいです。時間。これを行うことを私が知っている1つの方法は、4つのチャンクで再起動し、各チャンクのすべてのpidを待つことですが、よりスマートなことを行うのはそれほど難しくないことを望んでいます。
解決に向けたいくつかのスクラッチ作業:
デニスのリンクからいくつかのアイデアを使用して、2番目の試み。バニラバッシュソリューションにほぼ理想的:
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という名前のキューがまだ存在しないことを前提としていることです。それ以外は問題はなく、私が知る限り期待通りに動作しています。