LINUX.ORG.RU
ФорумAdmin

Проверка вебсервера башем и рестарт в случае ошибки


0

0

Здравия желаю!

У меня слабая вдска на Дебиане. Апач уже не справлялся с нагрузкой. Перешел на ligttpd. После этого рандомно раз примерно в 5-7 дней вебсервер подыхал, но довольно изощеренно: сам сервер работает но на любой запрос выдает 500 - Intenal Server Error. Помогает только рестар lighttpd.

Задача: написать скрипт на баше который бы смог определять выдает ли сервер эту ошибку, если выдает - рестарт вебсервера.

Все говорят ищи ошибку и не выделывайся этими сомнительными способами, но ошибку я итак ищу, а пока сервер лежит пользователи сидят без сайта и форума. Лежать он может с ночи до обеда, пока я не приду на работу и не рестартну его. Хочется чтоб рестартило само в случае ошибки. Важно именно обеспечить доступность ресурса, а ошибку я продолжу искать.

Что касается самого скрипта то периодичность и сам рестарт я могу сделать кроном и сам скрипт рестарта есть (именно им я и перезаупскаю когда сервак в дауне). Проблема только как башем обратиться к URL вебсервера, считать оттуда текст HTML и сравнить его с 500 - Internal Server Error. В сулчае совпадения текста - рестарт.

Прошу помочь. Куда копать, с чего начать?

P.s. Проверка pid вебсервера отпадает, потому что он работает, но на запросы отвечает ошибкой.


wget --no-verbose qwertyasdf.ya.ru 2> /tmp/error.txt

cat /tmp/error.txt | grep "ERROR 404"

gamecoder ()
 
if [ `wget -O - http://localhost/1.txt` -ne "1" ] 
then restart 

где restart - функция перезагрузки вебсервера, 1.txt - плейнтекст-файл, содержащий один-единственный символ «1».

leave ★★★★★ ()

возьми check_http из пакета nagios-plugind. У него масса параметров.

Bers666 ★★★★★ ()
Ответ на: комментарий от ef37

Спасибо!

Разобрался.

Добавил в крон вот такой sh файл:

#!/bin/bash
curl <адрес>/wscheck.php -o ws.txt
if grep "OK" ws.txt ; then
echo "OK!" else 
echo "$(date) Failure: restarting" >> ws_log.txt 
./wrestart.sh >fi ;

wscheck.php выдает всегда просто текст «ОК». Получается если не «ОК» то веб сервер выдал снова чушь или ошибку и потом записываю в лог дату рестарта и запускаю скрипт рестарта.

Попробую что из этого выйдет.

А еще тут предлагают примеры тоже неплохие, и даже более удобные. Если этот не сработает, попробую ;)

Еще раз спасибо! Помечу как решенное когда ребутнет автоматом после ошибки ;)

zvukoper ()
Ответ на: комментарий от zvukoper

./wrestart.sh

Это может не сработать, когда скрипт вызывается cron'ом его рабочий каталог может быть не там, где надо.

mky ★★★★★ ()
Ответ на: комментарий от mky

Да, точно. Я еще нуб :) Спасибо за подсказку. Исправлю на полный путь.

zvukoper ()

можно в inittab через respawn, но с upstart вроде это не работает

dimon555 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.