systemd サービスの標準出力とエラーを、パスに日付が含まれるファイルに接続するにはどうすればよいですか?

systemd サービスの標準出力とエラーを、パスに日付が含まれるファイルに接続するにはどうすればよいですか?

systemd でサーバー プロセスを実行し、その標準出力とエラーを、次のようにファイル パスに日付が含まれるファイルに追加したいと思います。

/initech/logs/tps-report-app/sales/2023/09/11/console.log

理想的には、日付が変わると自動的にそのパスがロールされるのが望ましいのですが、夜間にサーバーを再起動するので、それが実行されなくても世界が終わるわけではありません。

私がやりたくないことの 1 つは、出力が固定パスのファイルに書き込まれ、後で日付付きパスのファイルにローテーションされる従来のログ ローテーションを行うことです。

標準出力設定オプションを使用してファイルに出力を追加できますappend:pathが、その文字列には変数の置換に関する記述がないため、修正する必要があると思います。このパスに日付を組み込む方法はありますか?

そうでない場合、ここでの最善のアプローチは何ですか? 名前付きパイプなどを介して出力を multilog などのログ デーモンに接続しますか? systemd の「ツールキット」にそのようなものはありますか? 標準出力とエラーをリダイレクトするチェーン ローダーのようなスクリプトでサーバー プロセスをラップしますか? 他に何かありますか?

答え1

たとえば、 を使用してログを毎日ロールバックすることができますlogrotate。 を使用する代わりに、StandardOutputソフトウェアにログを /path/$( something-bashy here)/console.log に送信するように指示し、 の一部としてpostrotateパスを作成してから、問題のサービスを再起動することができます。

編集: サーバーが毎晩再起動されるとおっしゃっているのに気づきました。そうすると、ログファイル パスが存在することを確認することだけが問題になります。この場合、ログファイル パスの作成を に組み込みますExecStart。次のような感じになります。

ExecStart=/bin/bash -ac \
  "mkdir /my/path -p && run_app.sh"

関連情報