Каждую воскресную ночь во время logrotation debian squeeze происходит сбой apache, когда postlogrotation пытается перезагрузить конфигурацию и / или перезапустить apache. Я даже попытался переконфигурировать ротацию журнала путем жесткого перезапуска (остановки запуска) службы с теми же ошибками.
Что происходит, так это то, что apache, похоже, запускается нормально, но каждый запрос вызывает следующую ошибку в apache error.log:
[notice] child pid xxxx exit signal Segmentation fault (11)
Если я перезапущу apache еще раз вручную, он снова будет работать нормально. Кто-нибудь знает, почему это происходит?
Экземпляр AWS работает под управлением debian squeeze, apache 2.2.16, php 5.4.32 и varnish 3 (если это важно).
Любые предложения очень приветствуются. Если я пропустил соответствующую информацию, скажите мне!
ОБНОВЛЕНИЕ: я переместил сайты Magento на другой сервер, и проблема перестала возникать (хотя осталось еще несколько других сайтов), и этого не произошло на новом сервере. По-прежнему мало идей относительно того, чем это вызвано
Могут быть разные причины такого сбоя, и вместо того, чтобы что-то предполагать, я бы посоветовал вам потратить немного времени на отладку как сценария logrotate, так и сделать дамп ядра apache для анализа проблемы с помощью gdb
.
Вы можете вручную запустить сценарий logrotate в подробном режиме следующим образом (-v verbose, -f force):
logrotate -vf /etc/logrotate.d/apache2
Для создания кордампа и анализа его с помощью gdb вы можете установить все необходимые пакеты с помощью apt-get, и это не очень сложно настроить.
Установите gdb и необходимые файлы символов:
apt-get install gdb
apt-get install apache2-dbg php5-dbg
Устанавливать CoreDumpDirectory
в конфигурации apache:
CoreDumpDirectory /tmp/apache2-coredump
Установите неограниченный ulimit:
ulimit -c unlimited
Вы можете прочитать coredump с помощью gdb следующим образом:
gdb apache2 -core /tmp/apache2-coredump/core
Вот подробное руководство: Как выяснить, что вызывает сбой сегментации Apache
Измените метод вращения, используя rotatelogs в вашей конфигурации apache:
CustomLog "|bin/rotatelogs -l /var/logs/logfile.%Y.%m.%d 86400" common
rotatelogs выполнит ротацию журналов, так что изящность больше не требуется.
Вам понадобится cron только сжать старые журналы.
Документация: https://httpd.apache.org/docs/2.2/programs/rotatelogs.html
PS: Я знаю, что это не объясняет, почему у вас есть ошибка сегментации, но с этим методом у вас больше не будет изящности во время вращения.