Наш производственный сервер работает под управлением Apache v2.2.4 на CentOS5.2. Мононуклеоз v1.2.4 интегрирован в Apache.
Недавно мы столкнулись с проблемой на нашем производственном сервере. Из журнала access_log Apache я обнаружил внутреннюю ошибку сервера HTTP 500 для одного из HTTP-запросов, и все последующие HTTP-запросы также завершились неудачно, но с ошибкой недоступности службы HTTP 503. После этого ни один из запросов не был успешным. Кроме того, только спустя некоторое время мы поняли, что наше приложение не работает из-за этой ошибки, и перезапустили службу Apache.
Мои вопросы:
НОТА: Mono помогает запускать приложения, разработанные в .NET, в ОС на базе Linux.
РЕДАКТИРОВАТЬ: Я согласен найти первопричину этой проблемы. Фактически, мы это тоже анализировали. Пока мы не решим эту проблему, я выясняю, можно ли перезапустить ее немедленно, без простоев / перебоев в обслуживании пользователей приложений.
вы действительно должны исправить проблему, но вы можете запустить что-то вроде этого для временного решения:
#!/bin/sh
HTTP_STATUS=`lynx -head -source http://mysite.com |head -1 |awk '{print $2}'`
if [ "$HTTP_STATUS" = "503" ]
then
/etc/init.d/http restart
fi
Я не думаю, что ты можешь или должен. Намного лучше оставить сервер как есть и попытаться найти причину проблемы. ИМХО, перезапуск при ошибке - это вообще плохая политика.
Если вы все еще настаиваете, попробуйте посмотреть на что-нибудь вроде SWATCH для отслеживания журналов Apache и устранения ошибки 503.
Ошибки 503 обычно связаны с ошибками обслуживаемого приложения или ошибкой конфигурации. Он должен быть в журнале ошибок apache (если у вас нет журнала ошибок, включите его в конфигурации с помощью Журнал ошибок директиве и контролируйте, какой уровень регистрации ошибок вы хотите с LogLevel).
Ты можешь использовать контролировать чтобы проверить страницу и убедиться, что код HTTP с определенной страницы в порядке, и что делать, если нет (например, перезапуск apache).
У вас может быть что-то вроде следующего в вашем httpd.conf
:
ErrorDocument 500 /cgi-bin/handle-500-error.pl
Это вызовет сценарий всякий раз, когда обнаруживается ошибка, и настроит его на перезапуск сервера.
Я столкнулся с ошибкой 503, когда что-то, что я выполняю обратным проксированием за Apache, не работает. Перезапуск службы с обратным проксированием исправляет это, но эта ошибка ожидается, если я отключил эту службу.
Возможно, какое-то расширение пытается связаться с другой службой, которая не работает, или время ожидания истекло.
Я понимаю, что вы хотите:
Вы хотите, чтобы что-то отслеживало журнал и МОМЕНТАЛЬНО перезапускало apache, если возникнет конкретная ошибка. Вы не хотите зондировать каждую минуту, просто смотрите журнал.
Вы можете добиться этого, но это может вызвать проблемы с производительностью, хотя это не будет стоить вам много мощности сервера.
Тем не мение! Как правило, это не очень хорошая идея, поскольку некоторые люди мог узнайте, что вы искали, в файле журнала, а затем просто продолжайте делать 404 ошибки с этой строкой в конце URL-адреса. Но:
Отредактируйте файл конфигурации и направьте журнал ошибок в сценарий, например:
ErrorLog "| /bin/bash /scripts/logMonitor.sh"
Затем создайте этот сценарий, и это может быть что-то вроде этого:
#!/bin/bash
while read input; do
if [[ $input == *someError* ]]; then
echo "--- ERROR REGISTERED - RESTARTING APACHE ---" >> /tmp/err.log
/etc/init.d/apache2 restart
fi
# Always log what is thrown at us.
echo "$input" >> /tmp/err.log
done
Это сделает то, о чем вы просите, но это некрасиво и не рекомендуется.