SSHを使用して複数のリモートホストでランダムなコマンドを実行したいと思います。これらのほとんどは、サーバーリソースを監視し、出力をローカルワークステーション(またはtail -f
/ etcなど)に集約する長期実行コマンドです。mpstat
tcpdump
tcpflow
grep
問題は、後ですべてのホストSSH接続とリモートコマンドを確実にシャットダウンしながらコマンドを実行し続ける方法が見つからなかったことです。
私は多くのssh
フラグのバリエーション、大気、猫、読書、トラップなどを試しました。すべてすぐにシャットダウンし、ローカル端末がハングアップした後、またはSSH接続が終了した後も、リモートコマンドはリモートホストで実行され続けます。
これが私が今持っているものです。
function server_ssh() {
pids=""
for box in 01 02 03; do
ssh -t -t -f server$box "$1" &
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
# wait, cat, read ??
}
答え1
何かみたいGNUパラレル次のようにしてみてください。
function server_ssh() {
parallel --line-buffer ssh server{} "$1" ::: 01 02 03
}
--line-buffer
異なるコマンドの出力を一緒に混在させるオプションが必要です(基本的に各コマンドの出力をグループ化するため、各コマンドの表示が完了するまで待つ必要があります)。
-u
ここでも働かなければなりません。通常、いくつかの行を混在させることができますが、使用しているコマンドはおそらく行ベースであるため、これは起こらないでください。
編集:--line-buffer
私のバージョン(20130922-1)はアルファテスト中ですので選択します-u
。