다음 병렬 명령을 실행합니다.
parallel -q -j0 ssh {} 'echo {}; tmp/myscript' ::: host1 host2 host3 ....
위 행에는 대부분의 호스트에 대한 결과가 표시됩니다.
불행하게도 일부 호스트에서는 병렬 명령이 중단됩니다. 스크립트가 무한 루프에 빠진 것 같습니다.
어느 호스트에 걸려 있는지 어떻게 알 수 있나요?
모든 호스트에 액세스 가능합니다. 나는 이것을 다음 명령으로 테스트했습니다.
parallel -q -j0 ssh {} 'echo {}; date' ::: host1 host2 host3 ....
답변1
다음을 사용하겠습니다 --timeout 1000%
. 작업이 일반적인 실행 시간보다 10배 더 오래 걸리면 해당 작업을 종료합니다.
--joblog mylog
그런 다음 어떤 작업이 시간 초과되었는지 확인하는 데 사용합니다 (exit val = -1).
또한 --nonall
(대신 -q ssh
) 및를 사용하여 --tag
어떤 작업이 완료되었는지 확인하고 어떤 작업이 중단되었는지 추론할 수도 있습니다.
답변2
명령을 사용하여 확인할 수 있습니다 ps
.
스크립트를 다시 실행하고 중단될 때까지 기다린 후 다음을 실행합니다.
ps -elf | grep ssh
ssh
노드의 프로세스가 "중지"되는 것을 볼 수 있습니다 .
답변3
병렬성이 없는 솔루션을 찾았습니다.
내가 운영해
for host in host1 host2 ...; do echo $host; ssh $host tmp/myscript; echo; done
그래야 어디에 걸려 있는지 알 수 있어요.