Bash-скрипт для проверки, запущены ли apache, nginx, mysql и ssh на сервере

Bash-скрипт для проверки запущены ли apache nginx mysql и ssh на сервереВозникла необходимость в небольшом легком sh-скрипте который бы с определенной периодичностью проверял запущены ли сервисы на VPS. В частности меня интересовала база данных MySQL однако если бы мониторились таким же образом и apache nginx ssh и тп для меня это было бы также неплохо. Понятно что можно использовать громоздкие системы мониторинга однако меня вполне устраивают Ajenti + Munin которые я уже ставил на свой сервер однако они настолько простые что конретно этого (вроде?) не умеют…

На просторах интернета конечно были найдены предложения подобной функциональности однако что-то меня во всех не устроило так что на основании найденного написал свой ремикс :) Ну и естественно выкладываю на всеобщее рассмотрение может кому еще понадобится а кто-то возможно укажет на ошибки или предложит улучшение :)

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
#!/bin/bash ################################################################################################# Проверка статуса apache nginx mysql ssh и перезагрузка сервисов при необходимости################################################################################################ # Команда для отправки почтыMAILCMD="$(which mail)"# Файл письмаMAILMESSAGE="/tmp/vps_service.fail.$$"# Email куда слать уведомленияEMAILID="[email protected]" # Функция для отправки письмаmail_doxer(){$MAILCMD -s "Уведомление о проблемах на VPS-сервере $(hostname)" $EMAILID < $MAILMESSAGE} echo "Данное письмо отправлено Вам так как были обнаружены проблемы">>$MAILMESSAGEecho "на сервере $(hostname) а Ваш адрес указан в скрипте для таких уведомлений">>$MAILMESSAGEecho "----------------------------------------------------------------------------------------------------" >>$MAILMESSAGEecho "">>$MAILMESSAGE ApacheThread=`ps -A|grep apache2|wc -l`NginxThread=`ps -A|grep nginx|wc -l`MysqldThread=`ps -A|grep mysql|wc -l`SSHThread=`ps -A|grep ssh|wc -l` ## Проверяем запущен ли apache2# if [ $ApacheThread -eq 0 ]; thenecho "ОШИБКА:">>$MAILMESSAGEecho "-- При проверке обнаружено что веб-сервер Apache не был запущен!">>$MAILMESSAGEecho "-- Произведена попытка запуска в $(date +"%d.%m.%y %H:%M:%S")...">>$MAILMESSAGE# Пытаемся запустить сервис/etc/init.d/apache2 start# "Вздремнем" на секундочку (так на всякий пожарный)sleep 1# Проверяем работает ли сервис после выполнения скриптаecho "ТЕКУЩИЙ СТАТУС:" >>$MAILMESSAGEApacheThreadAfter=`ps -A|grep apache2|wc -l`if [ $ApacheThreadAfter -eq 0 ]; thenecho "-- Apache сейчас НЕ ЗАПУЩЕН!" >>$MAILMESSAGEecho "">>$MAILMESSAGEelseecho "-- Apache сейчас запущен..." >>$MAILMESSAGEecho "">>$MAILMESSAGEfifi ## Проверяем запущен ли nginx# if [ $NginxThread -eq 0 ]; thenecho "ОШИБКА:">>$MAILMESSAGEecho "-- При проверке обнаружено что веб-сервер Nginx не был запущен!">>$MAILMESSAGEecho "-- Произведена попытка запуска в $(date +"%d.%m.%y %H:%M:%S")...">>$MAILMESSAGE# Пытаемся запустить сервис/etc/init.d/nginx start# "Вздремнем" на секундочку (так на всякий пожарный)sleep 1# Проверяем работает ли сервис после выполнения скриптаecho "ТЕКУЩИЙ СТАТУС:" >>$MAILMESSAGENginxThreadAfter=`ps -A|grep nginx|wc -l`if [ $NginxThreadAfter -eq 0 ]; thenecho "-- Nginx сейчас НЕ ЗАПУЩЕН!" >>$MAILMESSAGEecho "">>$MAILMESSAGEelseecho "-- Nginx сейчас запущен..." >>$MAILMESSAGEecho "">>$MAILMESSAGEfifi ## Проверяем запущен ли mysql# if [ $MysqldThread -eq 0 ]; thenecho "ОШИБКА:">>$MAILMESSAGEecho "-- При проверке обнаружено что MySQL-сервер не был запущен!">>$MAILMESSAGEecho "-- Произведена попытка запуска в $(date +"%d.%m.%y %H:%M:%S")...">>$MAILMESSAGE# Пытаемся запустить сервис/etc/init.d/mysql start# "Вздремнем" на секундочку (так на всякий пожарный)sleep 1# Проверяем работает ли сервис после выполнения скриптаecho "ТЕКУЩИЙ СТАТУС:" >>$MAILMESSAGEMysqldThreadAfter=`ps -A|grep mysql|wc -l`if [ $MysqldThreadAfter -eq 0 ]; thenecho "-- MySQL-сервер сейчас НЕ ЗАПУЩЕН!" >>$MAILMESSAGEecho "">>$MAILMESSAGEelseecho "-- MySQL-сервер сейчас запущен..." >>$MAILMESSAGEecho "">>$MAILMESSAGEfifi ## Проверяем запущен ли ssh-сервер# if [ $SSHThread -eq 0 ]; thenecho "ОШИБКА:">>$MAILMESSAGEecho "-- При проверке обнаружено что SSH не был запущен!">>$MAILMESSAGEecho "-- Произведена попытка запуска в $(date +"%d.%m.%y %H:%M:%S")...">>$MAILMESSAGE# Пытаемся запустить сервис/etc/init.d/ssh start# "Вздремнем" на секундочку (так на всякий пожарный)sleep 1# Проверяем работает ли сервис после выполнения скриптаecho "ТЕКУЩИЙ СТАТУС:" >>$MAILMESSAGESSHThreadAfter=`ps -A|grep ssh|wc -l`if [ $SSHThreadAfter -eq 0 ]; thenecho "-- SSH сейчас НЕ ЗАПУЩЕН!" >>$MAILMESSAGEecho "">>$MAILMESSAGEelseecho "-- SSH сейчас запущен..." >>$MAILMESSAGEecho "">>$MAILMESSAGEfifi  # Получаем текущее значение LALOAD=`uptime | grep -o 'load average.*' | cut -c 15-18` # Если оно больше указанного ниже значения то это также повод для беспокойстваif [ $LOAD \> 15.0 ]; thenecho "ВНИМАНИЕ!!! Слишком большая нагрузка!" >>$MAILMESSAGEecho "-- Текущий Load Average: $LOAD " >>$MAILMESSAGEelseecho "-- Текущий Load Average: $LOAD " >>$MAILMESSAGEfi  echo "----------------------------------------------------------------------------------------------------" >>$MAILMESSAGEecho "***Это письмо сгенерировано скриптом $(basename $0)***" >>$MAILMESSAGEecho "***Не стоит отвечать на это письмо это всего лишь уведомление***" >>$MAILMESSAGE # Проверяем был ли нерабочим хоть один из проверяемых сервисов если да то шлем емэйлif [ $ApacheThread -eq 0 ] || [ $NginxThread -eq 0 ] || [ $MysqldThread -eq 0 ] || [ $SSHThread -eq 0 ] || [ $LOAD \> 15.0 ]; thenmail_doxerfi # "Вздремнем" на секундочку (так на всякий пожарный)sleep 1 #Удаляем временный файл письмаrm -f $MAILMESSAGE

Собственно скрипт сохраняем в любое место присваиваем ему права доступа на исполнение (755) и можно повесить в cron для того чтобы он периодически проверял запущены ли необходимые сервисы (по образу и подобию можно добавить хоть сколько их) и при необходимости запускал неактивные…

В скрипте не забываем заменить адрес e-mail на свой…

После выполнения скрипта (если какой-то сервис был не запущен) будет отправлено письмо такого вида:
Bash-скрипт для проверки запущены ли apache nginx mysql и ssh на сервере
Если все проверяемые сервисы были запущены то письмо отсылаться естественно не будет…

UPD: Добавил в скрипт еще и проверку на высокий Load Average (нагрузка на сервер) - при высоком значении (у меня это 15.0) будет отправляться предупреждение что нагрузка слишком высока…


Оригинал статьи http://pingvinoff.net/2011/12/27/skript-proverki-apache-nginx-mysql-ssh-na-servere/

0 комментариев

Оставить комментарий