私は押すことができます標準出力 / 標準エラー出力からピン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