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
.
我做了很多研究并找到了这些链接,但它们没有帮助。我不明白它们是如何工作的:
谁能解释一下逻辑?
小智 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
使用ssh
中batch mode
,并在同一时间保留stdout+stderr
从这些后台作业中的每一个喷出到host
目录中名称为的文件中$logdir
,可以在需要时对其进行检查。
最后,通过wait
内部for
循环末尾的命令,我们等待一组结束,然后再启动下一组。