使用shell脚本在多个服务器上并行执行命令

api*_*411 1 linux shell shell-script

我有 1000 台远程机器。我想对所有这些命令运行一些特定的命令,但要并行执行。我使用这些按顺序运行的命令:

for f in `cat host.lst`
do
       ./runScript.sh $f
done
Run Code Online (Sandbox Code Playgroud)

假设host.lst包含 100 个主机。我想runScript.sh在 100 台主机上并行运行。此外,应维护日志。

我无法在我的机器上安装任何实用程序,例如PSSH.

我做了很多研究并找到了这些链接,但它们没有帮助。我不明白它们是如何工作的:

在许多服务器上通过 SSH 自动运行命令

对匹配模式的多个文件并行执行命令

谁能解释一下逻辑?

小智 6

logdir=`mktemp -d`
bunch=200

IFS=$'\n'
for hosts in $(< hosts.lst xargs -r -L "$bunch"); do
   IFS=" ";
   for host in $hosts; do
      ssh -n -o BatchMode=yes "$host" './runScript.sh' 1>"$logdir/$host.log" 2>&1 &
   done
   wait
done
Run Code Online (Sandbox Code Playgroud)

假设主机1000(千)列出了在一个/线路hosts.lst文件,然后从这些一束在一个时间(200)中选择,并且在每个这些200台主机都您催生runScript.sh使用sshbatch mode,并在同一时间保留stdout+stderr从这些后台作业中的每一个喷出到host目录中名称为的文件中$logdir,可以在需要时对其进行检查。

最后,通过wait内部for循环末尾的命令,我们等待一组结束,然后再启动下一组。