systemd serviceで始まったプログラムがありますmyprogram.service
。問題は、ログをログファイルに直接書き込むことです/opt/myprogram/logs.txt
。 journalctl
.
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
。