我想在 systemd 下運行伺服器進程,並將其標準輸出和錯誤附加到一個檔案中,其中檔案路徑中有一個日期,如下所示:
/initech/logs/tps-report-app/sales/2023/09/11/console.log
理想情況下,我希望該路徑在日期更改時自動滾動,但如果沒有,也不是世界末日,因為無論如何我們都會在一夜之間重新啟動伺服器。
我不想做的一件事是進行傳統的日誌輪換,其中輸出寫入具有固定路徑的文件,然後稍後輪換到具有日期路徑的文件。
這標準輸出配置選項讓我使用 將輸出附加到文件中append:path
,但該字串中沒有提到變數替換,所以我認為它必須被修復。有什麼方法可以將日期合併到這條路徑中嗎?
如果不是,這裡最好的方法是什麼?透過命名管道或類似管道將輸出連接到諸如 multilog 之類的日誌守護程序? systemd「工具包」中有類似的東西嗎?用鍊式載入器類型的腳本包裝伺服器進程,該腳本重定向標準輸出和錯誤?還有別的事嗎?
答案1
例如,您可以使用 每天滾動日誌logrotate
。StandardOutput
您可以告訴您的軟體將日誌傳送至 /path/$(此處為 some-bashy)/console.log 並作為建立路徑的一部分,而不是使用postrotate
,然後重新啟動相關服務。
編輯:剛剛注意到您提到伺服器每晚都會重新啟動。那麼您唯一關心的是確保日誌檔案路徑存在。在這種情況下,我會將日誌檔案路徑的建立合併到ExecStart
.就像是
ExecStart=/bin/bash -ac \
"mkdir /my/path -p && run_app.sh"