Debian

Logrotate 疑難解答

  • April 5, 2019

問題

我有幾個相同的伺服器,它們都執行相同logrotate的配置來旋轉自定義日誌文件。在至少其中一台伺服器上,我的日誌沒有正確輪換。

我已經斷斷續續地解決這個問題好幾個星期了,但無濟於事。這是更多資訊以及我到目前為止所採取的步驟。任何幫助,將不勝感激。

我基本上沒有辦法解決這個問題,並且很想嘗試一些想法來看看這裡出了什麼問題。

我試過的

(配置文件如下)

  1. 檢查主logrotate文件的配置和權限。那裡的一切對我來說都很好。
  2. 將目標目錄的權限設置derp為 logrotate 需要的權限(該目錄不能是世界可寫的afaik)。
  3. 強制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
}

和腳本基本上啟動程序(套接字伺服器)或停止它並在所有其他伺服器上正常工作prerotatepostrotate我很確定那裡沒有問題。

/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 執行,因此在正常工作日完成的任何手動日誌輪換都可能會阻止日誌輪換發生,直到兩天后。

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