次の並列コマンドを実行します。
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
そうすればどこにかかっているのか分かります。