Logrotate

日誌旋轉不起作用

  • May 1, 2017

我正在嘗試讓 logrotate 在我的 VPS 上工作以每週輪換我的 apache 文件。目前 apache2 配置文件的內容是這樣的。

"/var/www/user/site.com/logs/*.log"   {
       weekly
       missingok
       rotate 8
       compress
       delaycompress
       notifempty
       create 640 root adm
       sharedscripts
       postrotate
               /etc/init.d/apache2 reload > /dev/null
       endscript
}

我已經離開它兩個星期了,據我所知沒有任何改變。當我從命令行模擬它時,我得到以下輸出。

user@geneva:/var/lib/logrotate$ /usr/sbin/logrotate -d /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for "/var/www/user/site.com/logs/*.log" 

Handling 1 logs

rotating pattern: "/var/www/user/site.com/logs/*.log"     weekly (8 rotations)
empty log files are not rotated, old logs are removed
considering log /var/www/user/site.com/logs/access.log
 log does not need rotating
considering log /var/www/user/site.com/logs/error.log
 log does not need rotating
not running postrotate script, since no logs were rotated

關於我配置錯誤的任何想法?

我的狀態文件也是空的:(

user@geneva:~$ cat /var/lib/logrotate/status
logrotate state -- version 2

更新

我刪除了狀態文件並強制執行了 logrotate,現在日誌看起來已經被輪換了,狀態文件看起來更有希望!

sudo rm /var/lib/logrotate/status

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

我認為這weekly意味著 logrotate 希望查看您的 access.log 文件至少一周前的條目以便輪換它。

因此,問題似乎是您沒有儲存狀態條目來觸發輪換。


這是一個簡單案例的逐步範例,說明 logrotate 如何決定輪換日誌文件

(這些是 Fedora 路徑,Ubuntu,Centos 等可能不同)

(我提出了一些要求,http://localhost所以在 access_log 中有一些條目,否則 logrotate 永遠不會旋轉……)

所以我已經將我的 apache 的 logrotate 設置為每週一次;

/var/log/httpd/*log {
       weekly
...
}

/var/lib/logrotate.status並且最初文件 中沒有條目

# grep access_log /var/lib/logrotate.status
<- nothing

所以 logrotate 不會旋轉access_log文件;

#  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
...
considering log /var/log/httpd/access_log
 log does not need rotating

但是,如果我像這樣手動執行 logrotate;

#  /usr/sbin/logrotate   /etc/logrotate.d/httpd 

httpd access_log 的狀態文件中現在有一個條目;

# grep access_log /var/lib/logrotate.status
"/var/log/httpd/access_log" 2012-5-11

但是 apache 仍然不會輪換日誌,因為該條目只有 0 天(2012-5-11);

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
considering log /var/log/httpd/access_log
  log does not need rotating

但是,如果您使用 vi 編輯狀態文件,則vi /var/lib/logrotate.status像這樣將日期設置為一周以上…;

# grep access_log /var/lib/logrotate.status
"/var/log/httpd/access_log" 2012-4-11    <---    more than a week ago..

然後 logrotate 現在正確地旋轉文件,因為狀態文件中的日期是2012-4-11從今天開始的一個多星期前2012-5-11

#  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd
considering log /var/log/httpd/access_log
log needs rotating           <---    logrotate rotates the file.

(請記住,-d導致空執行,因此僅對檢查有用,您必須實際執行命令而不-d進行狀態條目或旋轉文件等)

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