gpt4 book ai didi

bash - 重新启动一堆服务器,在重新启动期间只保留一些服务器

转载 作者:行者123 更新时间:2023-12-04 05:40:57 27 4
gpt4 key购买 nike

考虑以下脚本:

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 的命名队列已经在使用中。除此之外,我没有看到任何问题,据我所知,它完全按预期工作。

最佳答案

xargs具有类似于 parallel 的并行特性:

echo $(get-all-hosts) | tr ' ' '\n' | xargs -P 4 -n 1 ./blocking-restart

..哪里 blocking-restart预计采用单个服务器的名称,重新启动它并等待它完成。请注意 tr将每个主机放在自己的行上,这是 xargs 所期望的。

关于bash - 重新启动一堆服务器,在重新启动期间只保留一些服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com