Каждый раз logrotate
запускает Apache / 2.4.7 (Ubuntu), возникает ошибка сегмента и не перезапускается:
[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
Мой сценарий apache logrotate выглядит так:
/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
}
Я сохраняю логи по умолчанию /var/log/apache2
, но я веду журналы конкретных виртуальных хостов (для трех разных хостов, размещенных на этом сервере) в /srv/apache/log
каталог (например, mysite1_error.log
, mysite1_access.log
, mysite2_error.log
, mysite2_access.log
....).
Соответствующие части /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
где export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
. В моих файлах конфигурации vhost, таких как /etc/apache2/sites-enabled/mysite1.conf
У меня есть:
#/etc/apache2/sites-enabled/mysite1.conf
LogLevel debug
ErrorLog /srv/apache/log/mysite1_error.log
CustomLog /srv/apache/log/mysite2_access.log combined
и аналогично для других сайтов.
Кто-нибудь знает, почему logrotate вызывает этот сбой?
Еще кое-что:
Вручную принудительно запустить logrotate как root:
logrotate -v -f /etc/logrotate.d/apache2
не вызывает ошибку seg, но я знаю, что это logrotate, поскольку я пытался играть со временем (еженедельно, ежедневно), и ошибка seg всегда возникает точно так же, как только ротация журналов.
Как воспроизвести по запросу
# 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
в заключение
Если я закомментирую /srv/apache/log/*.log
блок вращения в /etc/logrotate.d/apache
ошибка сегмента также не возникает.
Кажется, что если я просто изменю сценарий logrotate на один блок, т.е. /var/log/apache2/*.log, /srv/apache/logs/*.log {....}
Я не получаю segfault. Таким образом, только два блока вызвали вторую попытку перезапуска во время первого перезапуска ...
Если я войду apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful &
в строке cmd моя система ДЕЛАЕТ segfault, что, кажется, подтверждает