日誌旋轉不起作用
我正在嘗試讓 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
進行狀態條目或旋轉文件等)