Linux

為什麼 logrotate 不處理特定的日誌文件?權限和配置相同。Debian Linux

  • November 2, 2018

我無法讓我的網站的訪問日誌輪換。預設日誌文件旋轉正常,權限和 logrotate conf 文件行與那些相同,但由於某種原因它們沒有被觸及。我在系統日誌或有關它的消息中找不到任何錯誤。

旋轉精細:

$ l /var/log/hiawatha/
-rw-r----- 1 www-data www-data  442604 Oct 31 06:03 access.log
-rw-r----- 1 www-data www-data  478300 Oct 28 06:12 access.log.1
-rw-r----- 1 www-data www-data    8295 Aug 26 05:24 access.log.10.gz
-rw-r----- 1 www-data www-data   12156 Aug 21 06:14 access.log.11.gz

不旋轉:

$ l /var/www/my_site/log/
-rw-r----- 1 www-data www-data 309498755 Oct 31 07:26 access.log
-rw-r----- 1 www-data www-data  14218318 Oct 31 05:00 error.log

日誌旋轉配置:

$ more /etc/logrotate.d/hiawatha 
/var/log/hiawatha/access.log {
   weekly
   compress
   delaycompress
   rotate 52
   missingok
   create 640 www-data www-data
   sharedscripts
   postrotate
       /usr/bin/killall -HUP hiawatha
   endscript
}

/var/www/my_site/log/*.log {
   weekly
   compress
   delaycompress
   rotate 52
   missingok
   create 640 www-data www-data
   sharedscripts
   postrotate
       /usr/bin/killall -HUP hiawatha
   endscript
}

謝謝。


使用 -vf 手動執行命令後的更多資訊,如下面的伺服器故障建議。我認為 -f 是使事情正常進行的原因,因為我將執行以下命令:

sudo /usr/sbin/logrotate /etc/logrotate.conf

…之前沒有結果。請注意,即使我只是在幾秒鐘前執行了命令(沒有-f),也有一行說“上次旋轉時間為 2018-10-31 06:00”,所以它以某種方式將日誌標記為已旋轉,即使它沒有旋轉. 但是使用 -f 執行:

sudo /usr/sbin/logrotate -vf /etc/logrotate.conf

…產生以下輸出(修剪為僅顯示與此問題相關的行)。我沒有看到任何跡象表明它以前為什麼不起作用,但希望它只需要第一次被強制,它會從現在開始起作用:

rotating pattern: /var/www/my_site/log/*.log  forced from command line (52 rotations)
empty log files are rotated, old logs are removed
considering log /var/www/my_site/log/access.log
 Now: 2018-11-02 16:29
 Last rotated at 2018-10-31 06:00
 log needs rotating
{...}
considering log /var/www/my_site/log/error.log
 Now: 2018-11-02 16:29
 Last rotated at 2018-10-31 06:00
 log needs rotating
{...}
rotating log /var/www/my_site/log/access.log, log->rotateCount is 52
dateext suffix '-20181102'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
previous log /var/www/my_site/log/access.log.1 does not exist
renaming /var/www/my_site/log/access.log.52.gz to /var/www/my_site/log/access.log.53.gz (rotatecount 52, logstart 1, i 52), 
old log /var/www/my_site/log/access.log.52.gz does not exist
renaming /var/www/my_site/log/access.log.51.gz to /var/www/my_site/log/access.log.52.gz (rotatecount 52, logstart 1, i 51), 
{...}
log /var/www/my_site/log/error.log.53.gz doesn't exist -- won't try to dispose of it
renaming /var/www/my_site/log/access.log to /var/www/my_site/log/access.log.1
creating new /var/www/my_site/log/access.log mode = 0640 uid = 33 gid = 33
renaming /var/www/my_site/log/error.log to /var/www/my_site/log/error.log.1
creating new /var/www/my_site/log/error.log mode = 0640 uid = 33 gid = 33
running postrotate script

嘗試在詳細模式下手動執行 logrotate,看看是否有任何問題。例如:logrotate -vf /etc/logrotate.conf。這強制輪換所有日誌,並 HUP 配置所有守護程序。請注意,它可能會導致服務間歇性不可用。

如果詳細輸出中沒有出現任何內容,請開始註釋掉行,/etc/logrotate.d/hiawatha直到某些東西起作用。只是預感,我懷疑後旋轉線引起了問題,所以也許從那開始。

引用自:https://serverfault.com/questions/938098