Logrotate
Logrotate 無法按預期工作
我的 CentOS 6 安裝中 httpd 的預設 logrotate 規則如下所示:
[root@myVM ~]# cat /etc/logrotate.d/httpd /var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
此外,預設情況下,logrotate cron 會在每個午夜執行一次。我想更改 logrotate,使其像現在一樣工作,而且如果 error.log 的大小達到 100M,它將被壓縮。
為了做到這一點,我嘗試以下方法:
(i) 創建
/etc/logrotate.d/httpd_error
配置文件:[root@myVM ~]# cat /etc/logrotate.d/httpd_error /var/log/httpd/error_log { missingok notifempty size 100M sharedscripts delaycompress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
(ii) 創建一個 cron 動作,它將
/usr/sbin/logrotate /etc/logrotate.d/httpd_error
每分鐘執行一次但是它不起作用,當我生成日誌文件並手動執行時,
/usr/sbin/logrotate -d /etc/logrotate.d/httpd_error
我得到:[root@myVM ~]# perl -e 'print "error error error" x 10000 for 1..1000 ;' > /var/log/httpd/error_log [root@myVM ~]# ls -al /var/log/httpd/error_log -rwxrwxrwx. 1 root root 170000000 2015-10-07 04:10 /var/log/httpd/error_log [root@myVM ~]# /usr/sbin/logrotate -d /etc/logrotate.d/httpd_error reading config file /etc/logrotate.d/httpd_error reading config info for /var/log/httpd/error_log Handling 1 logs rotating pattern: /var/log/httpd/error_log 104857600 bytes (no old logs will be kept) empty log files are not rotated, old logs are removed considering log /var/log/httpd/error_log log needs rotating rotating log /var/log/httpd/error_log, log->rotateCount is 0 dateext suffix '-20151007' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' renaming /var/log/httpd/error_log.1 to /var/log/httpd/error_log.2 (rotatecount 1, logstart 1, i 1), renaming /var/log/httpd/error_log.0 to /var/log/httpd/error_log.1 (rotatecount 1, logstart 1, i 0), renaming /var/log/httpd/error_log to /var/log/httpd/error_log.1 disposeName will be /var/log/httpd/error_log.1 running postrotate script running script with arg /var/log/httpd/error_log : " /sbin/service httpd reload > /dev/null 2>/dev/null || true " removing old log /var/log/httpd/error_log.1 error: error opening /var/log/httpd/error_log.1: No such file or directory
我究竟做錯了什麼?
如果它是相關的,我
logrotate.conf
看起來像這樣:[root@myVM ~]# cat /etc/logrotate.conf # see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }
您在這裡的錯誤是嘗試僅執行配置(
/usr/sbin/logrotate -d /etc/logrotate.d/httpd_error
)的一部分,其中沒有任何輪換。你忽略了你的logrotate.conf
.採用:
/usr/sbin/logrotate -d /etc/logrotate.conf
所以你實際上得到了旋轉設置。