Cron

/var/lib/logrotate/status 獲取無效條目

  • April 13, 2018

我們看到我們 /var/lib/logrotate/status得到了無效的條目,如下所示:

saurabh@1236:~$ cat /var/lib/logrotate/status
logrotate state -- version 2
"/var/log/syslog" 2018-3-13
"/var/log/auth.log" 2018-3-13
"/var/log/debug" 2018-3-13
"/var/log/lpr.log" 2018-3-13
"/var/log/user.log" 2018-3-13
"/var/log/mail.info" 2018-3-13
"/var/log/cron.log" 2018-3-13
og/messages" 2018-3-13           <=== Corrupted entry
"/var/log/cron.log" 2018-3-13
"/var/log/messages" 2018-3-13

不知道這是如何以這種方式損壞的。它在 10/12 天后隨機發生。

我的猜測是,這可能是因為多個 crons 編輯了這個文件,這導致了這個問題,因為多個試圖編輯這個文件,但我不確定這可能是問題所在。為了測試我在最近添加的一個 cron 中添加了一些隨機延遲,如下所示:

*/10 * * * * root sleep $(expr $RANDOM \% 90); /usr/sbin/logrotate -f /etc/logrotate.d/myFile

對於具體的解決方案有什麼更好的建議嗎?

您的機器上有多個logrotate由 cron 作業執行的並發實例。使用的狀態文件沒有鎖定,因此不同的logrotate作業在更新它時會“互相踩踏”。

由於您在目錄中添加了myFile配置,因此您不必在單獨的 cron 作業中顯式輪換它們。通常的cron 作業執行會自動獲取該配置。logrotate``/etc/logrotate.d``logrotate

如果您需要比系統的預設日誌輪換更頻繁地執行輪換,我建議將myFile配置放在其他位置。

要確保您的輪換作業不使用相同的狀態文件(在輪換作業可能與系統的日誌輪換作業同時執行的情況下),請使用另一個狀態文件:

/usr/sbin/logrotate -f -s /some/location/myFile.state /some/location/myFile

請注意,該作業不需要以 root 身份執行,除非日誌文件由 root 或您以外的某個使用者擁有。換句話說,如果日誌文件屬於您,您可以在個人 cron 作業中進行輪換。

引用自:https://unix.stackexchange.com/questions/437351