2 つの異なるホストのトレースログファイル

2 つの異なるホストのトレースログファイル

異なるホストで2つのログファイルを追跡し、結合された出力を単一の出力として使用しようとしています。

ssh HOST_1 "tail -f MY_LOG_FILE"

また、mkfifoを使用して名前付きパイプを作成します。

mkfifo MY_PIPE

問題は。 MY_PIPEにローカルコマンドを出力すると正常に動作しますが、sshコマンドを出力すると名前付きパイプから何も読み取れません(他の端末でtail -f MY_NAMED_PIPEを使用)。

mkfifo MY_PIPE

ssh HOST_1 "tail -f MY_LOG_FILE" > MY_NAMED_PIPE

上記のコマンドはパイプから出力を生成しません。

正しくパイプするためにsshコマンドの引数がありますか?

これをパイプする他の方法はありますか?

答え1

また、使用することができますティー追加オプションの使用(-ㅏ)コンテンツをマージします。

第1ターミナルから

ssh HOST_1 "tail -f /path/to/file" | tee -a /path/to/merged/contents

第2ターミナルで

ssh HOST_2 "tail -f /path/to/file" | tee -a /path/to/merged/contents

第3ターミナルで

tail -f /path/to/merged/contents

答え2

ssh HOST_1 "tail -f MY_LOG_FILE" > MY_NAMED_PIPE

tailプログラムはTTYに書き込まないため、出力を約8KB単位でバッファリングします。 MY_LOG_FILEがアクティブでない場合、出力が表示されない理由かもしれません。正常に動作してもテールは行全体を一度に書き込めないため、複数のテールインスタンスの出力が深刻に歪む可能性があります。

sshTTYを使用してtailコマンドを実行できます。これにより、tail出力が1行ずつバッファリングされます。これにより、より良い結果が得られます。

ssh -tt HOST_1 "tail -f MY_LOG_FILE" > MY_NAMED_PIPE

SSHのマニュアルページを参照できます。ここ

答え3

次のようにしました。

mkfifo MY_PIPE
ssh HOST_1 "tail -f /var/log/messages" > MY_PIPE

私のローカルコンピュータで、次のコマンドを実行します。

tail -f /var/log/messages > MY_PIPE

ローカルコンピュータの他の端末から:

cat < MY_PIPE

リモートコマンドとローカルコマンドの両方の出力がtail -f /var/log/messages表示されます。

私が従ったチュートリアルはLinuxマガジン。

関連情報