Bash并行进程是否已关闭系统?


0

我有一台远程控制服务器,可用来自动执行命令/脚本等到串联的所有节点。为了提高性能和速度,我想并行运行它。我大约在180个节点中执行命令。在系列赛中,我大约需要2个小时才能完成所有任务的执行。所以我目前正在寻找速度。伪代码如下所示,我使用based64将命令发送到其他节点。我可以使用它执行任何任意复杂的命令。

for host in ${sshconfig[@]}; do
 ssh "$host" "echo $COMMAND | base64 -d | bash" &
done

但是我忘了有很多节点,所以我犯了一个错误,所以我的bash脚本为每个节点创建了许多进程,结果,控制服务器的系统崩溃了,它已经关闭。现在,我无法再连接到它了。

我想知道,如何在bash脚本中分配内存?简便的操作ssh使bash非常适合我的情况,但是我想知道如何通过并行执行bash来提高性能,而又不必担心系统崩溃等问题。


您要连接多少台主机?您的实际脚本是什么样的?xargs以更可控的方式并行执行此操作相当容易。您可能没有在bash脚本中分配内存(但是您显示的脚本看起来根本不像bash)。
库萨兰达

@Kusalananda更新。
拉基布·菲哈

1
您是否在运行没有调度程序/工作负载和资源管理器(如slurm)的集群?它被打包为ubuntu slurm-wlm。如果这对于您的需求来说太过强大了,请尝试使用pdsh(并行分布式Shell-也为ubuntu包装)。
cas

我当时在想使用厨师,骨肉,p等服务,但不愿意为他们的服务付费。我将试用Pdsh!我在想制作能够有效分配内存的基于C或C ++的程序有多困难
Rakib Fiha

Answers:


-1

要限制并行SSH连接的数量,可以这样使用xargs

printf '%s\n' "${sshconfig[@]}" |
xargs -P 4 -I {} ssh "{}" "echo $COMMAND | base64 -d | bash"

这将在最多四个并行实例(由提供-P 4)中运行命令。该-I {}选项将使命令中的字符串xargs替换为{}从其标准输入读取的字符串。标准输入连接到printf该输入,此时仅打印sshconfig列表中的一项。

您将使用各种-P设置进行测试,直到找到一个看起来不错的数字。

如果远程计算机上的登录shell是bash,则还可以考虑

code=$( base64 -d <<<"$COMMAND" )

printf '%s\n' "${sshconfig[@]}" |
xargs -P 4 -I {} ssh "{}" "$code"

我猜想在这种情况下我不再需要&了?我也将所有输出重定向到2>&1本地,因此我认为使用xargs也可以做到这一点。
Rakib Fiha

@RakibFiha与xargs您将不会使用&。重定向与所有的输出2>&1,地方重定向在最后的的xargs命令,或者简单地重定向随时随地可以运行它的脚本本身。
库萨兰达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.