Logrotate funktioniert nicht wie erwartet

Logrotate funktioniert nicht wie erwartet

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_errorKonfigurationsdatei 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_errorjede 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_errorerhalte 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.confsieht 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.

verwandte Informationen