Cada vez que se logrotate
ejecuta Apache / 2.4.7 (Ubuntu) experimenta una falla seg y no se reinicia:
[Wed Sep 10 06:35:54.266018 2014] [mpm_event:notice] [pid 20599:tid 140630283466624] AH00493: SIGUSR1 received. Doing graceful restart
[Wed Sep 10 06:35:54.885118 2014] [core:notice] [pid 20599] AH00060: seg fault or similar nasty error detected in the parent process
Mi script de apache logrotate se ve así:
/var/log/apache2/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/usr/sbin/apachectl graceful
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
/srv/apache/log/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/usr/sbin/apachectl graceful
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
Guardo los registros predeterminados en /var/log/apache2
, pero no dejo de registros específicos vhost (para los tres diferentes dominios virtuales alojadas en este servidor) en el /srv/apache/log
directorio (por ejemplo mysite1_error.log
, mysite1_access.log
, mysite2_error.log
, mysite2_access.log
....).
Las partes relevantes de /etc/apache2/apache.conf
:
#/etc/apache2/apache.conf
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel trace8 # I set to try and get more info about this problem.
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
donde export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
. En mis archivos conf de vhost, como
/etc/apache2/sites-enabled/mysite1.conf
tengo:
#/etc/apache2/sites-enabled/mysite1.conf
LogLevel debug
ErrorLog /srv/apache/log/mysite1_error.log
CustomLog /srv/apache/log/mysite2_access.log combined
y similar para los otros sitios.
Alguien sabe por qué logrotate está causando este bloqueo?
Una cosa más:
Forzar manualmente el logrotate como root:
logrotate -v -f /etc/logrotate.d/apache2
no causa la falla seg, pero sé que es logrotate ya que he intentado jugar con los tiempos (semanal, diario) y la falla seg siempre ocurre exactamente ya que los registros se están rotando solo.
Cómo reproducir bajo demanda
# Set a crontab to run each minute (simulating cron.daily run of logrotate)
crontab -e
*/1 * * * * root /usr/sbin/logrotate -v -f /etc/logrotate.d/apache2 > /home/myuser/logrotate.log 2>&1
Finalmente
Si comento el /srv/apache/log/*.log
bloque de rotación en /etc/logrotate.d/apache
la falla seg tampoco ocurre.
fuente
/usr/sbin/apachectl graceful
el delincuente (en teoría, los scripts dentro de /etc/logrotate.d/httpd-prerotate también son candidatos). ¿Puedes confirmar corriendo/usr/sbin/apachectl graceful
manualmente? ¿Hay más pistas cuando esto sucede en el registro de errores global de Apache (o el registro del sistema global), tal vez cuando aumenta el LogLevel no solo dentro de <VirtualHost> sino globalmente?/usr/sbin/apachectl graceful
manualmente en la línea cmd no causa problemas (también tenga en cuenta que esta línea era originalmente/etc/init.d/apache2 reload > /dev/null
pero después de obtener la falla seg, cambié aapachectl
un consejo que leí en línea, obviamente no solucionó las cosas). LogLevel ya está en el nivel más alto posible a nivel mundial,trace8
establecido en elapache.conf
archivo./etc/logrotate.d/httpd-prerotate
no existe./usr/sbin/apachectl graceful
está causando un segfault cuando lo emite logrotate, pero no cuando se emite manualmente? ImparRespuestas:
Parece que si solo cambio el script logrotate para que sea un solo bloque, es decir
/var/log/apache2/*.log, /srv/apache/logs/*.log {....}
, no obtengo el segfault. Entonces, solo los dos bloques estaban causando un segundo intento de reinicio durante el primer reinicio ...Si ingreso
apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful &
en la línea de cmd, mi sistema TIENE segfault, lo que parece confirmarfuente