Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 重新启动一组服务器,在重新启动过程中只关闭少数服务器_Bash - Fatal编程技术网

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/Debian
moreutils
包中)可能可以在这里提供帮助;如果您重新编写
重新启动服务器
工具以阻止,直到服务器恢复,您可以如下方式运行脚本:

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