Perché logrotate sta causando errori di Apache ogni volta?


15

Ogni volta che logrotateviene eseguito Apache / 2.4.7 (Ubuntu) si verifica un errore seg e non si riavvia:

[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

Il mio script logrotate di apache è simile a:

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

Tengo i log di default in /var/log/apache2, ma continuo a ceppi specifici vhost (per i tre diversi vhosts ospitati su questo server) nella /srv/apache/logdirectory (ad esempio mysite1_error.log, mysite1_access.log, mysite2_error.log, mysite2_access.log....).

Le parti rilevanti di /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

dove export APACHE_LOG_DIR=/var/log/apache2$SUFFIX. Nei miei file di configurazione vhost, come ad esempio /etc/apache2/sites-enabled/mysite1.confho:

#/etc/apache2/sites-enabled/mysite1.conf
LogLevel debug
ErrorLog  /srv/apache/log/mysite1_error.log
CustomLog /srv/apache/log/mysite2_access.log combined

e simili per gli altri siti.

Qualcuno sa perché logrotate sta causando questo arresto?

Un'altra cosa:

Forzare manualmente il logrotate come root:

logrotate -v -f /etc/logrotate.d/apache2

non causa l'errore seg, ma so che è logrotate poiché ho provato a giocare con i tempi (settimanali, giornalieri) e l'errore seg si verifica sempre esattamente mentre i log vengono ruotati solo.

Come riprodurre su richiesta

# 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

Infine

Se commento anche il /srv/apache/log/*.logblocco di rotazione /etc/logrotate.d/apachenell'errore seg non si verifica neanche.


Forma il messaggio di errore che sembra essere /usr/sbin/apachectl gracefull'autore del reato (in teoria anche gli script all'interno di /etc/logrotate.d/httpd-prerotate sono candidati). Puoi confermare eseguendo /usr/sbin/apachectl gracefulmanualmente? Ci sono altri suggerimenti quando ciò accade nel log degli errori globale di Apache (o nel syslog globale), forse quando si aumenta LogLevel non solo all'interno di <VirtualHost> ma a livello globale?
Nils Toedtmann,

/usr/sbin/apachectl gracefulmanualmente alla riga cmd non causa problemi (nota anche che questa riga era originariamente /etc/init.d/apache2 reload > /dev/nullma dopo aver ricevuto l'errore seg, sono passato a un apachectlconsiglio che ho letto online, ovviamente non ha risolto le cose). LogLevel è già al livello più alto possibile a livello globale, trace8impostato nel apache.conffile.
fpghost,

E solo per escluderlo: /etc/logrotate.d/httpd-prerotatenon esiste.
fpghost,

Questo di solito è causato da un modulo che non si spegne correttamente. Stai usando moduli esotici? Qualcosa aggiunto di recente? Moduli di terze parti? Prova a disabilitarli.
Giovanni Tirloni,

Quindi /usr/sbin/apachectl gracefulsta causando un segfault quando viene emesso da logrotate, ma non quando viene emesso manualmente? Odd
Nils Toedtmann,

Risposte:


13

Sembra che se cambio semplicemente lo script logrotate in un singolo blocco, vale a dire /var/log/apache2/*.log, /srv/apache/logs/*.log {....} non ottengo il segfault. Quindi erano solo i due blocchi a causare un secondo tentativo di riavvio durante il primo riavvio ...

Se entro apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful &sulla linea cmd il mio sistema FA segfault, il che sembra confermare


1
Ho questo esatto problema, ma solo un blocco nel mio script logrotate per cominciare. Qualche idea?
Kontextify,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.