如何將 systemd 服務的標準輸出和錯誤連接到路徑中包含日期的檔案?

如何將 systemd 服務的標準輸出和錯誤連接到路徑中包含日期的檔案?

我想在 systemd 下運行伺服器進程,並將其標準輸出和錯誤附加到一個檔案中,其中檔案路徑中有一個日期,如下所示:

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

理想情況下,我希望該路徑在日期更改時自動滾動,但如果沒有,也不是世界末日,因為無論如何我們都會在一夜之間重新啟動伺服器。

我不想做的一件事是進行傳統的日誌輪換,其中輸出寫入具有固定路徑的文件,然後稍後輪換到具有日期路徑的文件。

標準輸出配置選項讓我使用 將輸出附加到文件中append:path,但該字串中沒有提到變數替換,所以我認為它必須被修復。有什麼方法可以將日期合併到這條路徑中嗎?

如果不是,這裡最好的方法是什麼?透過命名管道或類似管道將輸出連接到諸如 multilog 之類的日誌守護程序? systemd「工具包」中有類似的東西嗎?用鍊式載入器類型的腳本包裝伺服器進程,該腳本重定向標準輸出和錯誤?還有別的事嗎?

答案1

例如,您可以使用 每天滾動日誌logrotateStandardOutput您可以告訴您的軟體將日誌傳送至 /path/$(此處為 some-bashy)/console.log 並作為建立路徑的一部分,而不是使用postrotate,然後重新啟動相關服務。

編輯:剛剛注意到您提到伺服器每晚都會重新啟動。那麼您唯一關心的是確保日誌檔案路徑存在。在這種情況下,我會將日誌檔案路徑的建立合併到ExecStart.就像是

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

相關內容