Почему logrotate вызывает Apache к отказу seg каждый раз?

Каждый раз logrotate Apache/2.4.7 выполнений (Ubuntu) испытывает отказ seg и не перезапускает:

[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

Мой апачский 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, но я сохраняю vhost определенные журналы (для трех различных vhosts размещенными на этом сервере) в /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 conf файлы, такой как /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 как корень:

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 отказ seg не происходит также.

15
задан 10 September 2014 в 16:59
1 ответ

Похоже, что если я просто изменю сценарий logrotate на отдельный блок, то есть / var / log / apache2 / *. Log, / srv / apache / logs / *. log {....} Я не получаю segfault. Итак, только два блока вызвали вторую попытку перезапуска во время первого перезапуска ...

Если я введу apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & в строку cmd моей системы ДЕЛАЕТ segfault, что, кажется, подтверждает

13
ответ дан 2 December 2019 в 20:54

Теги

Похожие вопросы