Logrotate 疑難解答
問題
我有幾個相同的伺服器,它們都執行相同
logrotate
的配置來旋轉自定義日誌文件。在至少其中一台伺服器上,我的日誌沒有正確輪換。我已經斷斷續續地解決這個問題好幾個星期了,但無濟於事。這是更多資訊以及我到目前為止所採取的步驟。任何幫助,將不勝感激。
我基本上沒有辦法解決這個問題,並且很想嘗試一些想法來看看這裡出了什麼問題。
我試過的
(配置文件如下)
- 檢查主
logrotate
文件的配置和權限。那裡的一切對我來說都很好。- 將目標目錄的權限設置
derp
為 logrotate 需要的權限(該目錄不能是世界可寫的afaik)。- 強制
logrotate
執行以下內容:logrotate --force /etc/logrotate.d/derp
此命令可以正確輪換日誌,但第二天它們將不會執行。 4. 手動將日期更改為過去的某個時間
/var/lib/logrotate/status
,然後查看日誌是否在下次logrotate
啟動或以下情況下正確執行:logrotate -vv /etc.logrotate.d/derp
這將輪換日誌一次,但下一次輪換日誌時不會輪換。這是成功的手動旋轉的輸出:
rotating pattern: /derp/*.log after 1 days (14 rotations) empty log files are not rotated, old logs are removed considering log /derp/access.log log needs rotating considering log /derp/php_errors.log log does not need rotating rotating log /derp/access.log, log->rotateCount is 14 dateext suffix '-20150814' ... files getting renamed and moved ... running prerotate script renaming /derp/access.log to /derp/access.log.1 creating new /derp/access.log mode = 0774 uid = 0 gid = 4 running postrotate script
生活是美好的,不是嗎?唯一的問題是第二天,當它需要旋轉時(即它總是有數據並且永遠不會為空),什麼也沒有發生。 5. 我諮詢了許多 SEU 問題,其中這個問題在過去處理其他 logrotate 問題時很有幫助。
配置
該系統正在執行最新的 Debian 7。生成日誌文件的程序以 root 身份執行。生成日誌文件的程序是一個
php
應用程序並產生多個子程序。以下是相關配置,
derp
我的自定義日誌文件的位置在哪裡:
/etc/logrotate.d/derp
配置文件的權限:
-rw-r--r-- 1 root root 265 Jul 9 2014 derp
/derp/*.log { daily missingok rotate 14 compress delaycompress notifempty create 774 root adm sharedscripts postrotate nohup /derp/daemonrestart.sh > /dev/null 2>&1 endscript prerotate killall -9 php > /dev/null 2>&1 endscript }
和腳本基本上啟動程序(套接字伺服器)或停止它並在所有其他伺服器上正常工作
prerotate
。postrotate
我很確定那裡沒有問題。
/var/lib/logrotate/status
(已編輯以顯示相關資訊)
logrotate state -- version 2 "/var/log/kern.log" 2015-7-20 ... "/derp/php_errors.log" 2015-8-11 ... "/derp/access.log" 2015-8-14 ...
/derp/
目標目錄的權限:
drwxr-xr-x 2 root root 4096 Jun 18 10:05 derp
相關日誌位於
\derp\
:
-rwxrwxr-- 1 root adm 3755558 Aug 14 07:57 access.log
好吧,我放棄了嘗試解決這個問題。Cron 來救援。
sudo crontab -e
然後將以下行添加到超級使用者的 crontab
# Logrotate they said... 3 6 * * * /usr/sbin/logrotate -f /etc/logrotate.d/derp &> /dev/null
該
-f
標誌強制 logrotate 旋轉日誌。位於的文件/etc/logrotate.d/derp
是我的應用程序的相應 logrotate 配置。它很難看,但這是我修復此錯誤的唯一方法。
你寫了:
使用以下命令強制 logrotate 執行:
logrotate --force /etc/logrotate.d/derp
. 此命令可以正確輪換日誌,但第二天它們將不會執行。這裡的問題是該
daily
屬性實際上意味著“24 小時”。因此,除非(可能在 中)的cron
條目距離您手動輪換日誌文件的時間超過 24 小時,否則日誌文件將在之後的第二天才會輪換。logrotate``/etc/cron.d/daily
在我的 Debian 系統上,條目
/etc/cron.daily
每天在 06:25 執行,因此在正常工作日完成的任何手動日誌輪換都可能會阻止日誌輪換發生,直到兩天后。