백그라운드에서 여러 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
원격 명령이 표준 입력을 리디렉션하지 않는지 확인하십시오. 표준 파일 디스크립터 중 하나는 SSH 연결에 연결되어 있어야하므로 ssh는 원격 명령이 완료 될 때까지 기다립니다. – Barmar