rsyslog が出力をキャッチしない?

rsyslog が出力をキャッチしない?

私は押すことができます / からrsyslog に次のようにコマンドを実行します。

ping www.superuser.com 2>&1 | logger -p user.info

私のシステムでは、「ライブ」出力は単純な で監視できますtail -f /var/log/messages。 対応する行があるため、そこに表示されます/etc/rsyslog.config

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                -/var/log/messages

しかし、私のカスタム プログラムでは同じことが機能しません。

myprogram 2>&1 | logger -p user.info

myprogramバイナリは呼び出し後すぐには戻り/終了しません。しばらく実行され、時々メッセージをコンソールに出力します(printfを使用)。出力をロガーにパイプしない場合はこのように動作します。間違っていたら訂正してください。この動作はコマンドを実行します (少なくとも目的地に到達したとき)。

では、なぜ myprogram の出力が表示されないのでしょうか/var/log/messages? 出力が何らかの理由でバッファリングされていて、まだ logger に届いていないだけなのでしょうか? 構成行に関する何か他の原因があるのでしょうかrsyslog.conf?

答え1

結局、myprogramバッファリングされた出力だった。前述のトリックを使ってこの質問では私はすぐに解決策を思いつきました:

script -q -c "myprogram" | logger -p user.info

関連情報