我試圖在後臺運行幾臺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