異なるホストで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がアクティブでない場合、出力が表示されない理由かもしれません。正常に動作してもテールは行全体を一度に書き込めないため、複数のテールインスタンスの出力が深刻に歪む可能性があります。
ssh
TTYを使用して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マガジン。