LINUX.ORG.RU
ФорумAdmin

Скрипт, который будет проверять сервис MySQL на рабочее состояние

 


0

1

Есть сервер Ubuntu 14.04, хотелось бы реализовать на нём скрипт, который будет проверять сервис MySQL на рабочее состояние...

Если работает, скрипт «уходит спать», а если не работает - service mysql restart. Есть предложения? Или это можно сделать sh файлом?


...называется вотчдог. Пилите Шура.

anonymous
()

Есть консольный клиент mysql. По идее, можно им подключаться и давать какую-нибудь команду для проверки работы сервера СУБД, потом по коду завершения процесса принимать решение.

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

Да спасибо за решение,! вот Думал сделать так. запилить скрипт и дергать по cron раз в 5 мин. в таком случае максимум что не будет работать MYSQL 5 мин:

#!/bin/bash
TSTMYSQL=`/etc/init.d/mysql status | grep stop`
if [ "$TSTMYSQL" == "mysql stop/waiting" ]; then
/etc/init.d/mysql start  

только не могу найти ошибку почему не работает.

root@vps412901:~# /root/check_mysql.sh
-bash: /root/check_mysql.sh: /bin/bash^M: bad interpreter: No such file or directory
shrmvl
() автор топика
Ответ на: комментарий от SevikL

root@vps412901:~# ./check_mysql.sh ./check_mysql.sh: line 6: syntax error: unexpected end of file root@vps412901:~#

я так понимаю что команды не распознает

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

Не закрыт блок if, если ты целиком скрипт скопировал в своем сообщении

#!/bin/bash
TSTMYSQL=`/etc/init.d/mysql status | grep stop`
if [ "$TSTMYSQL" == "mysql stop/waiting" ]; then
/etc/init.d/mysql start
fi

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

Спасибо! Все отлично работает.

#!/bin/bash
TSTMYSQL=`/etc/init.d/mysql status | grep stop`
if [ "$TSTMYSQL" == "mysql stop/waiting" ]; then
/etc/init.d/mysql start
fi
sleep 3

Вопрос , как в скрипт вписать что-бы Логи вились при запуске скрипта.! тоесть, выяснять когда был падал Mysql

shrmvl
() автор топика

Для этих целей используйте систему мониторинга. К примеру, Zabbix.

А на обум запускать mysqld на серверепри заполненном / или нехватке inode так себе затея.

int13h ★★★★★
()

Если кому нужно!

Проверка статуса apache, nginx, mysql, ssh и перезагрузка сервисов при необходимости

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

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

Стань господня... Осиль уже exec > /tmp/app.log в начале скрипта. А вообще, вся эта наколенщина успешно заменяется monit'ом.

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