Проблема состоит в том, что с определенной периодичностью (раз в неделю) падает apache, который приходится потом поднимать вручную.
В error.log:
[Sun Oct 30 04:33:05 2016] [notice] SIGHUP received. Attempting to restart
[Sun Oct 30 04:33:05 2016] [notice] seg fault or similar nasty error detected in the parent process
Если запустить вручную service httpd restart, то апач поднимается и нормально работает.
Решение.
Определяем периодичность отсылки SIGHUP:
# cat /var/log/httpd/error_log* | grep "SIGHUP received"
[Sun Oct 16 03:09:08 2016] [notice] SIGHUP received. Attempting to restart
[Sun Oct 23 03:18:08 2016] [notice] SIGHUP received. Attempting to restart
[Sun Oct 30 04:33:05 2016] [notice] SIGHUP received. Attempting to restart
Тут видим что это происходит каждую неделю, значит крон тут замешан как-то.
Смотрим логи крона:
# cat /var/log/cron* | grep "Oct 30 04:33"
...
Oct 30 04:33:02 apache2 run-parts(/etc/cron.daily)[25626]: starting logrotate
# cat /var/log/cron* | grep "Oct 23 03:18"
...
Oct 23 03:18:01 apache2 run-parts(/etc/cron.daily)[13512]: starting logrotate
Видим, что в это время, когда был послан SIGHUP апачу, запускалось задание /etc/cron.daily/logrotate.
Смотрим что у нас в этом скрипте посылает SIGHUP:
# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
...
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
Пробуем воспроизвести ситуацию:
# /sbin/service httpd reload
# tail -2 /var/log/httpd/error_log
[Sun Oct 30 11:46:08 2016] [notice] SIGHUP received. Attempting to restart
[Sun Oct 30 11:46:08 2016] [notice] seg fault or similar nasty error detected in the parent process
# service httpd status
httpd dead but pid file exists
В error.log:
[Sun Oct 30 04:33:05 2016] [notice] SIGHUP received. Attempting to restart
[Sun Oct 30 04:33:05 2016] [notice] seg fault or similar nasty error detected in the parent process
Если запустить вручную service httpd restart, то апач поднимается и нормально работает.
Решение.
Определяем периодичность отсылки SIGHUP:
# cat /var/log/httpd/error_log* | grep "SIGHUP received"
[Sun Oct 16 03:09:08 2016] [notice] SIGHUP received. Attempting to restart
[Sun Oct 23 03:18:08 2016] [notice] SIGHUP received. Attempting to restart
[Sun Oct 30 04:33:05 2016] [notice] SIGHUP received. Attempting to restart
Тут видим что это происходит каждую неделю, значит крон тут замешан как-то.
Смотрим логи крона:
# cat /var/log/cron* | grep "Oct 30 04:33"
...
Oct 30 04:33:02 apache2 run-parts(/etc/cron.daily)[25626]: starting logrotate
# cat /var/log/cron* | grep "Oct 23 03:18"
...
Oct 23 03:18:01 apache2 run-parts(/etc/cron.daily)[13512]: starting logrotate
Видим, что в это время, когда был послан SIGHUP апачу, запускалось задание /etc/cron.daily/logrotate.
Смотрим что у нас в этом скрипте посылает SIGHUP:
# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
...
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
Пробуем воспроизвести ситуацию:
# /sbin/service httpd reload
# tail -2 /var/log/httpd/error_log
[Sun Oct 30 11:46:08 2016] [notice] SIGHUP received. Attempting to restart
[Sun Oct 30 11:46:08 2016] [notice] seg fault or similar nasty error detected in the parent process
# service httpd status
httpd dead but pid file exists
Видно что проблема происходит из-за некорректного httpd reload.
В данном случае решение мое заменить команду reload на restart.
# cat -n /etc/logrotate.d/httpd | grep restart
7 /sbin/service httpd restart > /dev/null 2>/dev/null || true
Почему так происходит, я так и не понял.
Где-то видел что это косяк mpm-event может быть, но в моем случае использовался prefork.
Возможно проблема была в init-скрипте апача, но я его не смотрел.
Комментариев нет:
Отправить комментарий