複数のリモートホストでSSHコマンドのトラップをクリアする

複数のリモートホストでSSHコマンドのトラップをクリアする

SSHを使用して複数のリモートホストでランダムなコマンドを実行したいと思います。これらのほとんどは、サーバーリソースを監視し、出力をローカルワークステーション(またはtail -f/ etcなど)に集約する長期実行コマンドです。mpstattcpdumptcpflowgrep

問題は、後ですべてのホスト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

おすすめ記事