Как автоматически перезапустить apache, если он перестает отвечать и сокет все еще используется
Сервер Apache Debian Linux x64 обслуживает сайт моно приложений на mysite.com и других сайтах с использованием виртуального хостинга.
Иногда apache перестает отвечать по неизвестной причине. Apache error_log содержит:
[Sat Jun 20 13:56:31 2015] [error] [client 90.190.33.164] File does not exist: /var/www/apple-touch-
icon.png
[Sat Jun 20 16:38:04 2015] [error] server reached MaxClients setting, consider raising the MaxClients setting
[Sat Jun 20 17:20:11 2015] [notice] caught SIGTERM, shutting down
mod-mono-server received a shutdown message
[Tue Jun 23 09:20:50 2015] [error] mod_mono: connect error (Interrupted system call). File: /tmp/mod
_mono_server_default
mod-mono-server received a shutdown message
mod-mono-server received a shutdown message
mod-mono-server received a shutdown message
[Tue Jun 23 09:20:54 2015] [error] Not running mod-mono-server.exe because no MonoApplications, Mono
ApplicationsConfigFile or MonoApplicationConfigDir specified.
[Tue Jun 23 09:20:54 2015] [notice] Apache/2.2.16 (Debian) mod_mono/2.6.3 configured -- resuming normal operations
..
Это выглядит как
[Sat Jun 20 16:38:04 2015] [error] server reached MaxClients setting, consider raising the MaxClients setting
сообщение в файле журнала появляется первым.
После этого, вероятно, задание cron пытается перезапустить apache, что приводит к сообщению в error_log:
[Sat Jun 20 17:20:11 2015] [notice] caught SIGTERM, shutting down
mod-mono-server received a shutdown message
В это время сервер не работал: access_log не регистрирует доступ с 20 июня 17:20
Сервер начинает перевыпуск только в [вторник 23 июня 09:20:50 2015], когда я перезапустил его вручную. Это начало происходить с прошлого месяца несколько раз в месяц.
Чтобы это исправить, следующий скрипт crontab используется каждые 10 минут:
wget --timeout=10 --no-verbose --tries=1 -a /var/log/wget.log -O /var/log/wgettulem.html mysite.com || /etc/init.d/apache2 restart
Если apache перестает отвечать, файл журнала, написанный этим сценарием, содержит
Connection timed out
Сообщения об ошибках.
Однако apache не перезагружается. Попытка перезапустить его вручную, используя
/etc/init.d/apache2 restart
возвращает Sockect - ошибка использования. ps aux показывает, что apace все еще работает.
Я исправляю это с помощью
ps aux | grpe apache
найти номер процесса appache и использовать
kill
убить этот процесс.
Как исправить или найти резонанс этого сообщения? Как автоматизировать этот процесс, чтобы все экземпляры apache были убиты, и apache будет автоматически перезапущен этим сценарием. Как лучше сделать так, чтобы apache отвечал?
Версия Debian - 6.0.4
apache2 -V возвращает
Server version: Apache/2.2.16 (Debian)
Server built: Feb 5 2012 21:35:42
Server's Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
apache2.conf содержит
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
1 ответ
Если вы просто хотите принудительно перезапустить Apache, если он зависает (по любой причине), вам следует установить System Integrity Monitor от R-fx Networks.
Среди многих функций, он может быть настроен для мониторинга ваших веб-сервисов, автоматического запуска команд перезапуска и отправки уведомлений.
Инструкции по быстрой установке:
cd /usr/local/src
wget http://www.rfxn.com/downloads/sim-current.tar.gz
tar -xvf sim-current.tar.gz
cd sim*
./setup -i
Продолжайте интерактивную установку, определяя соответствующие пути к файлам для исполняемых файлов вашего веб-сервиса. В качестве последнего шага включите cronjob:
/usr/local/sbin/sim -j