Systemd
Logrotate 不寫入新的 .log 文件
我有 4 個自定義 systemd 服務寫入自定義日誌
/var/log/
。我設置了一個logrotate
配置文件,但它沒有寫入最新的日誌。它仍在寫入舊.log.1
文件。新的已創建,只是沒有數據。這是我的 logrotate 配置:
/var/log/dealer*.log { daily missingok rotate 7 delaycompress notifempty su root root postrotate /bin/systemctl reload dealer*.service > /dev/null 2>/dev/null || true endscript create 0644 root root }
最新的日誌文件是空的:
-rw-r--r-- 1 root root 0 Jul 12 11:39 dealerF2f.log -rw-r--r-- 1 root root 0 Jul 12 11:39 dealerOutbound.log -rw-r--r-- 1 root root 0 Jul 12 11:39 dealerTimeout.log -rw-r--r-- 1 root root 0 Jul 12 11:39 dealerWeb.log
它仍在寫信給
.log.1
:-rw-r--r-- 1 root root 36M Jul 12 12:52 dealerOutbound.log.1 -rw-r--r-- 1 root root 9.2M Jul 12 12:52 dealerF2f.log.1 -rw-r--r-- 1 root root 19M Jul 12 12:52 dealerWeb.log.1 -rw-r--r-- 1 root root 171M Jul 12 12:52 dealerTimeout.log.1
通常,當程序仍然打開文件時,我會看到類似的內容-它將繼續寫入舊文件,直到程序重新啟動。
我敢打賭,如果您重新啟動而不是重新載入,它將按預期工作。
如果您無法完全重新啟動該過程,請查看 copytruncate 選項而不是 postrotate 腳本。
copytruncate 創建副本後將原始日誌文件截斷為零大小,而不是移動舊日誌文件並選擇性地創建新日誌文件。當某些程序無法被告知關閉其日誌文件並因此可能永遠繼續寫入(附加)到前一個日誌文件時,可以使用它。請注意,複製文件和截斷文件之間的時間片非常短,因此可能會失去一些日誌數據。使用此選項時,create 選項將不起作用,因為舊日誌文件保留在原處。