Назад | Перейти на главную страницу

apache2 не работает после корректного перезапуска

Сегодня мой экземпляр apache был автоматически перезапущен каким-то заданием cron, я думаю, после этого он не работал. Файл журнала ошибок apache показывает:

[Fri Jun 03 06:25:04.379685 2016] [mpm_prefork:notice] [pid 8256] AH00171: Graceful restart requested, doing restart
apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/mods-enabled/access_compat.load: Cannot load /usr/lib/apache2/modules/mod_access_compat.so into server: /usr/lib/apache2/modules/mod_access_compat.so: undefined symbol: ap_get_useragent_host

После запуска вручную через

service apache2 start

это сработало, как ожидалось.

Я уже отключил автоматические обновления безопасности на этой машине с Ubuntu 14.04, потому что на прошлой неделе у меня была аналогичная проблема, когда она печатала

[Thu May 26 06:27:29.737707 2016] [mpm_prefork:notice] [pid 1487] AH00171: Graceful restart requested, doing restart
apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/php5.load: Cannot load /usr/lib/apache2/modules/libphp5.so into server: /lib/x86_64-linux-gnu/libm.so.6: symbol __strtold_nan, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

Это какое-то состояние гонки? Почему несколько раз не удается загрузить модули?

ОБНОВИТЬ

Строка, упомянутая в ошибке, выглядит так:

LoadModule access_compat_module /usr/lib/apache2/modules/mod_access_compat.so

поэтому в этой строке нет синтаксической ошибки, и я ничего не менял, чтобы она снова заработала, просто снова запустите apache.

Томас, мне было бы интересно узнать, нашли ли вы решение своей проблемы. Эта ошибка коснулась меня сегодня утром. По иронии судьбы, он срабатывает каждый раз, когда Apache выполняет изящную перезагрузку. Тем не менее, запуск apache2 restart для перезапуска сервера работает без проблем. Изящная перезагрузка, с которой я столкнулся, была частью пост-процесса сценария ротации журнала для apache (/etc/logrotate.d/apache2). Здесь выполняется постепенная перезагрузка, чтобы освободить старые файлы журналов, чтобы они больше не занимали дисковое пространство. Я временно изменил это в своей работе, чтобы использовать перезапуск вместо перезагрузки, что позволило избежать проблемы.

Сообщение об ошибке в журнале указывает на модуль mod_access_compat как на проблему, поскольку это основной модуль, без которого я не могу обойтись. Итак, я начал исследовать и сравнивать различия. Эта проблема затронула меня только после того, как я обновился с 2.4.16 до 2.4.20 (и 2.4.23 на другом сервере). Похоже, что в 2.4.19 есть изменение, предлагающее всем модулям использовать ap_get_useragent_host вместо старой функции ap_get_remote_host для получения удаленного IP-адреса посетителя. Я решил загрузить последний исходный код (2.4.23) и изменить эту строку в mod_access_compat.c (строка 279) обратно на то, что было ранее в более старой версии: remotehost = ap_get_remote_host (r-> connection, r-> per_dir_config, REMOTE_DOUBLE_REV , & remotehost_is_ip);

После того, как я перекомпилировал apache, я скопировал новый mod_access_compat.so в папку с модулями, заменив поставляемый. С тех пор я смог без проблем перезапустить и перезагрузить компьютер. Хотя я еще не переместил это обновление на свой рабочий сервер, я сделаю это через несколько часов.

Очевидно, что это не долгосрочное решение, но оно решило мою проблему, пока разработчики Apache не исправят ее должным образом. Я использую Ubuntu 14.04.

Ваш пробег может отличаться, удачи!

ОБНОВИТЬ Я собрал свои выводы и отправил разработчикам Apache отчет об ошибке. Они предположили, что серверу нужна полная остановка и запуск, потому что после обновления некоторые компоненты все еще находились в памяти. Я протестировал снова, и плавная перезагрузка работала нормально - без замены модуля - на производственных серверах. Так что, по-видимому, это единовременная ошибка в процессе обновления, поскольку он должен останавливаться / запускаться, а не перезапускать сервер. Для всех, кто может это испытать; просто остановите сервер и запустите его снова.

Вот отчет об ошибке, который я подал (я ожидаю, что он действительно будет помечен как не связанный с ошибкой): https://bz.apache.org/bugzilla/show_bug.cgi?id=59842