Die Standard-Logrotate-Regeln für httpd in meiner CentOS 6-Installation sehen folgendermaßen aus:
[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
}
Außerdem wird logrotate cron standardmäßig einmal um Mitternacht ausgeführt. Ich möchte logrotate ändern, damit es so funktioniert wie jetzt und außerdem, dass error.log komprimiert wird, wenn seine Größe 100 MB erreicht.
Um dies zu tun, versuche ich Folgendes:
(i) /etc/logrotate.d/httpd_error
Konfigurationsdatei erstellen:
[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) Erstellen Sie eine Cron-Aktion, die /usr/sbin/logrotate /etc/logrotate.d/httpd_error
jede Minute ausgeführt wird
Es funktioniert jedoch nicht. Wenn ich eine Protokolldatei erstelle und manuell ausführe, /usr/sbin/logrotate -d /etc/logrotate.d/httpd_error
erhalte ich Folgendes:
[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
Was mache ich falsch?
Falls es relevant ist, meins logrotate.conf
sieht so aus:
[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
}
Antwort1
Ihr Fehler besteht darin, dass Sie versuchen, nur den Teil Ihrer Konfiguration ( /usr/sbin/logrotate -d /etc/logrotate.d/httpd_error
) auszuführen, der keine Rotation enthält. Sie ignorieren Ihre logrotate.conf
.
Verwenden:
/usr/sbin/logrotate -d /etc/logrotate.conf
so erhalten Sie tatsächlich die Rotationseinstellungen.