名前付きパイプを使用して syslog メッセージをトラップしています。次に、次のようなことを行うことで、syslog を簡単に表示できます。
cat /var/log/local3.pipe | grep somefilter
or
grep somefilter /var/log/local3.pipe
これらは両方とも、syslog をコンソールに非常にうまく出力します。ただし、それをファイルにキャプチャしたい場合、何も得られません。
cat /var/log/local3.pipe | grep somefilter >> somefile.log
or
grep somefilter /var/log/local3.pipe >> somefile.log
ファイルは常に 0 バイトのままです。誰かが理由を知っていますか?Red Hat Enterprise Linux 5 を使用しています。ありがとうございます。
追加情報: これを再現したい人のために、ここにコマンドの完全なリストがあります
su
<enter root password>
mkfifo /var/log/local3.pipe
chmod 644 /var/log/local3.pipe
echo "local3.* |/var/log/local3.pipe" >> /etc/syslog.conf
/etc/init.d/syslog restart
exit
次に、1 つの ssh セッションで:
cat /var/log/local3.pipe
および2番目のsshセッションで(「テストしてください」は最初のsshセッションで表示されるはずです
logger -p local3.info "Test it"
次に、最初のセッションでそれをに変更します
cat /var/log/local3.pipe >> somefile.log
さらにいくつかのログをローカル 3 に送信します (メッセージは異なる必要があります)。メッセージが somefile.log に記録されていることを確認します
logger -p local3.info "Test it 2"
次に、最初のセッションでそれをに変更します
cat /var/log/local3.pipe | grep -i test >> somefile.log
ログが somefile.log に出力されないことを確認します
メッセージは最後のメッセージとは異なる必要があることに注意してください。そうでない場合、ロガーはすぐにメッセージを送信しません。