ファイルからSystemdログへのログリダイレクト

ファイルからSystemdログへのログリダイレクト

systemd serviceで始まったプログラムがありますmyprogram.service。問題は、ログをログファイルに直接書き込むことです/opt/myprogram/logs.txtjournalctl.

myprogram.service特定のファイルのテキストをログにパイプするようにSystemdに指示するように変更することは可能ですか?

答え1

tailまず、とを組み合わせてみましょうlogger

tail -f /opt/myprogram/logs.txt | logger

tailファイルからすべての新しい行を継続的に読み取り、標準出力にコピーします。ロガーはこれらの行をシステムログに送信します。

編集する:

パイプがバッファリングされているため、ロガーはしばらく(4Kbのデフォルトバッファがいっぱいになるまで)スリープ状態になる可能性があります。この問題は、stdbufバッファリングを有効または無効にすることで解決できますunbuffer

stdbuf -i0 -o0 tail -f /opt/myprogram/logs.txt | logger

答え2

アプリケーションが出力ファイル名を変更できない場合は、サービス単位でシンボリックリンク/opt/myprogram/logs.txtで生成を強制的に生成できますか/dev/stdout?リリース前またはリリース後のステップ、または両方のステップで実行できます。

  • これはあなたのニーズによって異なります/dev/stderr

関連情報