Logrotate no funciona como se esperaba

Logrotate no funciona como se esperaba

Las reglas predeterminadas de logrotate para httpd en mi instalación de CentOS 6 se ven así:

[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
}

Además, de forma predeterminada, logrotate cron se ejecuta una vez cada medianoche. Quiero cambiar logrotate para que funcione como está ahora, además de que error.log se comprimirá si su tamaño alcanza los 100 M.

Para hacer esto, intento lo siguiente:

(i) Crear /etc/logrotate.d/httpd_errorarchivo de configuración:

[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) Cree una acción cron, que se ejecutará /usr/sbin/logrotate /etc/logrotate.d/httpd_errorcada minuto

Sin embargo, no funciona, cuando genero un archivo de registro y lo ejecuto manualmente /usr/sbin/logrotate -d /etc/logrotate.d/httpd_errorobtengo:

[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

¿Qué estoy haciendo mal?

Si es relevante, mi logrotate.confaspecto es el siguiente:

[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
}

Respuesta1

Su error aquí es intentar ejecutar solo la parte de su configuración ( /usr/sbin/logrotate -d /etc/logrotate.d/httpd_error) que no tiene ninguna rotación. Estás ignorando tu logrotate.conf.

Usar:

/usr/sbin/logrotate -d /etc/logrotate.conf

entonces realmente obtienes la configuración de rotación.

información relacionada