我试图在后台运行几台linux机器上的脚本。我的bash脚本是这样的:等待并行远程进程完成bash ssh
for i in {1..1000}; do
for j in {1..20}; do
ssh -n -f remotehost$j "sh -c 'cd /blah/; nohup ./script.sh $i > /dev/null 2>&1 &'"
NPROC=$(($NPROC+1))
if [ "$NPROC" -ge 40 ]; then
echo "Waiting for work to finish"
wait
NPROC=0
fi
done
done
这是我试图限制在服务器上的负载和只有40个流程的净在任何给定的时间运行在20台主机。这虽然不起作用,并且所有进程都在同一时间启动。您可以请指导我如何等待远程后台进程完成或防止在给定的远程主机上启动超过n个进程。
看起来非常有希望,但等待不起作用,所有进程一起启动。检查了我的输入,以确保它是正确的,但无法找到为什么这不起作用。 – Atlas
确保远程命令不会重定向stdin。其中一个标准文件描述符必须保持连接到SSH连接,以便ssh将等待远程命令完成。 – Barmar