tail
複数のリモートマシンでログファイルを作成し、出力をローカルワークステーションに転送しようとしています。Ctrl-を押したときに接続を閉じたいC。
現時点では、ほぼ意図したとおりに機能する次の機能があります。
function dogfight_tail() {
logfile=/var/log/server.log
pids=""
for box in 02 03; do
ssh server-$box tail -f $logfile | grep $1 &
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
trap wait
}
接続が閉じ、私はからの出力を受け取りますtail
。ただし、出力はバッチで行われるため、何らかのバッファリングが行われます。
そして、ここからがおもしろい部分です…
次を実行するときに同じバッファリング動作を確認/var/log/server.log
し、リモートマシン上のファイルに4〜5回「テスト」を追加します…
ssh server-01 "tail -f /var/log/server.log | grep test"
…そしてそれを無効にする2つの方法を見つけました…
-tフラグをsshに追加します。
ssh -t server-01 "tail -f /var/log/server.log | grep test"
リモートコマンドから引用符を削除します。
ssh server-01 tail -f /var/log/server.log | grep test
ただし、これらのアプローチはいずれも、上記の複数のマシンで実行される機能には機能しません。
実行時に同じバッファリング動作を持つdshを試しました。
dsh -m server-01,server-02 -c "tail -f /var/log/server.log | grep test"
ここでも同じですが、引用を削除すると、バッファリングがなくなり、すべてが正常に機能します。
dsh -m server-01,server-02 -c tail -f /var/log/server.log | grep test
また、parallel-ssh
これはまったく同じように動作しdsh
ます。誰かがここで何が起こっているのか説明できますか?
この問題を修正するにはどうすればよいですか?ssh
可能であれば、ストレートで行くのが理想的です。
PS multitail
任意のコマンドを実行できるようにしたいので、使用したくない、または類似したくない。
dbitail
からチェックアウトしてダウンロードできます。