A chaque logrotate
exécution, Apache / 2.4.7 (Ubuntu) rencontre une erreur de segmentation et ne redémarre pas:
[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
Mon script apache logrotate ressemble à:
/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
}
Je garde les journaux par défaut dans /var/log/apache2
, mais je continue à journaux spécifiques vhost (pour les trois vhosts différents hébergés sur ce serveur) dans le /srv/apache/log
répertoire (par exemple mysite1_error.log
, mysite1_access.log
, mysite2_error.log
, mysite2_access.log
....).
Les parties pertinentes 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
où export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
. Dans mes fichiers vhost conf, tels que
/etc/apache2/sites-enabled/mysite1.conf
j'ai:
#/etc/apache2/sites-enabled/mysite1.conf
LogLevel debug
ErrorLog /srv/apache/log/mysite1_error.log
CustomLog /srv/apache/log/mysite2_access.log combined
et similaire pour les autres sites.
Quelqu'un sait pourquoi logrotate est à l'origine de ce crash?
Une dernière chose:
Forcer manuellement le logrotate en tant que root:
logrotate -v -f /etc/logrotate.d/apache2
ne cause pas le défaut de segmentation, mais je sais que c'est logrotate car j'ai essayé de jouer avec les temps (hebdomadaire, quotidien) et le défaut de segmentation se produit toujours exactement comme les journaux sont tournés uniquement.
Comment reproduire sur demande
# 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
finalement
Si je commente le /srv/apache/log/*.log
bloc de rotation dans /etc/logrotate.d/apache
le défaut seg ne se produit pas non plus.
/usr/sbin/apachectl graceful
manuellement à la ligne cmd ne pose aucun problème (Notez également que cette ligne était à l'origine /etc/init.d/apache2 reload > /dev/null
mais après avoir obtenu la faute de segmentation, je suis passé à un apachectl
conseil que j'ai lu en ligne, évidemment cela n'a pas résolu les choses). Le LogLevel est déjà au niveau le plus élevé possible au niveau mondial, trace8
défini dans le apache.conf
fichier.
/etc/logrotate.d/httpd-prerotate
n'existe pas.
/usr/sbin/apachectl graceful
est à l' origine une erreur de segmentation lors de son émission par logrotate, mais pas quand émis manuellement? Odd
/usr/sbin/apachectl graceful
est celui du délinquant (en théorie, les scripts dans /etc/logrotate.d/httpd-prerotate sont également des candidats). Pouvez-vous confirmer en exécutant/usr/sbin/apachectl graceful
manuellement? Y a-t-il d'autres astuces lorsque cela se produit dans le journal d'erreurs global d'Apache (ou le syslog global), peut-être lorsque vous augmentez le LogLevel non seulement dans <VirtualHost> mais globalement?