Перезагрузитесь, если служба tomcat7 не отвечает
Я запускаю веб-приложение на сервере Tomcat. В коде сервера трудно обнаружить проблему, которая приводит к его аварийному завершению один или два раза в день. Я покопаюсь, чтобы исправить это, когда у меня будет время. Но до этого дня в проблемном случае перезапуск tomcat (/etc/init.d/tomcat7 restart) или в основном перезагрузка машины также покажутся довольно хорошими решениями. Я хочу обнаружить живость сервера с помощью wget, а не grep или чего-то еще, потому что, хотя tomcat запускает мой сервис, я не могу.
wget localhost:8080/MyService/
выходы
--2012-12-04 14:10:20-- http://localhost:8080/MyService/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2777 (2.7K) [text/html]
Saving to: “index.html.3”
100%[======================================>] 2,777 --.-K/s in 0s
2012-12-04 14:10:20 (223 MB/s) - “index.html.3” saved [2777/2777]
когда мой сервис закончится. И выводы
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:8080... failed: Connection refused.
или просто застрял после произнесения
--2012-12-04 14:07:34-- http://localhost:8080/MyService/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response...
Можете ли вы предложить мне сценарий оболочки с работой cron или что-то еще, чтобы сделать это. Я предпочитаю не использовать cron, если есть альтернатива.
3 ответа
Вместо того чтобы писать сценарии с нуля, я настоятельно рекомендую использовать Monit. Я нашел эту страницу, которая дает вам некоторые основы, но я считаю, что реализация здесь немного неаккуратна. Итак, позвольте мне сгладить это. Это объяснит, как установить monit
в Ubuntu 12.04. Сначала установите monit
из репозитория вот так:
sudo aptitude install monit
Затем вы хотите настроить параметры почтового сервера, чтобы получать оповещения по электронной почте. Просто откройте monit
Конфиг, как это:
sudo nano /etc/monit/monitrc
Теперь найдите область с настройками почтового сервера и вставьте эту строку:
set mailserver localhost
Это набор правил, который я использую для Apache. Сначала создайте файл конфигурации:
sudo nano /etc/monit/conf.d/apache2.conf
check process apache with pidfile /var/run/apache2.pid
start "/etc/init.d/apache2 start"
stop "/etc/init.d/apache2 stop"
if failed host 127.0.0.1 port 80
with timeout 15 seconds
then restart
if loadavg (1min) greater than 7
for 5 cycles
then restart
alert my_email@server.host only on { timeout, nonexist, resource }
Затем перезагрузите monit
вот так:
sudo service monit restart
Этот набор правил проверяет порт 80
на локальный адрес 127.0.0.1
и если время ожидания составляет 15 секунд, служба Apache перезапускается. К нему также подключено правило средней нагрузки, которое будет проверять нагрузку каждую минуту, и если оно превышает 7 в течение 5 циклов подряд, оно перезапускает apache
оказание услуг.
Для Tomcat адаптация правила на этой странице- как упоминалось выше - будет выглядеть следующим образом. Сначала откройте файл для редактирования в monit
каталог конфигурации, как это:
/etc/monit.d/tomcat
И поместите в него этот набор правил:
check host tomcat with address localhost
stop program = "/etc/init.d/tomcat stop"
start program = "/etc/init.d/tomcat restart"
if failed port 8080 and protocol http
then start
alert my_email@server.host only on { start, nonexist }
Затем перезагрузите monit
вот так для тех новых правил принять:
sudo service monit restart
Я бы дважды проверил { start, nonexist }
как я только сейчас догадываюсь, так как у меня нет установки Tomcat для тестирования. Но это должно быть хорошо.
Вы можете следовать monit
войти здесь:
sudo tail -f -n 200 /var/log/monit.log
Я надеюсь, что вы уже нашли причину своей проблемы и смогли ее исправить. Если вам или кому-то еще понадобится решение для этого, вот попытка ответа.
Дело в том, что ваш сервис иногда может зависать, и мониторинг также должен быть в состоянии его догнать. В приведенном ниже простом сценарии мы помещаем запрос состояния wget в фоновый режим, подождите несколько секунд и, если он не смог получить статус 200 из службы, перезапустите его.
#!/bin/sh
# WARNING, UNTESTED CODE !
TMPFILE=`mktemp`
WAITTIME=15
# Run the test
wget localhost:8080/MyService/ -o $TMPFILE &
WGETPID=$!
# Wait few seconds and let the test finish
sleep $WAITTIME
if [ ! `grep "HTTP request sent" $TMPFILE |grep "200 OK"|wc -l` -gt 0 ]; then
echo "The service did not return 200 in $WAITTIME seconds."
echo "Restarting it."
/etc/init.d/tomcat7 restart
fi
# Cleanup
rm $TMPFILE
kill $WGETPID
Для планирования я действительно рекомендую cron для простоты. Другим выбором было бы начать это как демон, который внес бы ненужную сложность, ИМХО. Также можно использовать какой-то другой (внешний) планировщик, но я сохраняю cron максимально простым.
Надеюсь, это поможет.
Монит является хорошим инструментом для этого. Он будет отслеживать службы или состояние сервера, такие как Tomcat (или пространство на жестком диске и т. Д.), И перезапускать их, отправлять вам электронные письма и т. Д. В соответствии с тем, что вы поместили в файл конфигурации, будучи более мощным и гибким, чем скрипт Bash (который вы можете предпочитаю для простоты).