Linux
為什麼 logrotate 不處理特定的日誌文件?權限和配置相同。Debian Linux
我無法讓我的網站的訪問日誌輪換。預設日誌文件旋轉正常,權限和 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
直到某些東西起作用。只是預感,我懷疑後旋轉線引起了問題,所以也許從那開始。