我的 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,它将被压缩。
为了做到这一点,我尝试了以下方法:
(一)创建/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
}
/usr/sbin/logrotate /etc/logrotate.d/httpd_error
(ii)创建一个 cron 操作,每分钟运行一次
但是它不起作用,当我生成日志文件并手动运行时,/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
}
答案1
/usr/sbin/logrotate -d /etc/logrotate.d/httpd_error
您在此处的错误是尝试仅运行配置 ( ) 中没有任何旋转的部分。您忽略了logrotate.conf
。
使用:
/usr/sbin/logrotate -d /etc/logrotate.conf
这样您实际上就获得了旋转设置。