Скрипт выполняет подключение к удалённому узлу и, в случае неудачной попытки, отправляет сообщение на почту.
Используются переменные:
CON
– описывается само подключение – узел, порт;
FILE
– временный файл, в который будет записывать лог процесса подключения;
SUBJ
– тема письма, которое будет отправляться;
TEXT
– текст письма 🙂
STR1
– переменная, которая получает требуемое слово из файла-лога (если telnet
подключился – в логе будет слово Connected);
STR2
– переменная, с которой будем сравнивать STR1
;
LOC
– файл блокировки, используется что бы не отправлять письма, если уже было отправлено одно. Удаляется в случае успешного подключения.
Отдельно задаём переменную SMTP-сервера, через который выполняем отправку:
export smtp
– обычно не нужен, но в данном случае необходимо было использовать отдельный SMTP-сервер.
Сам скрипт:
#!/bin/bash CON="telnet somehost.com 8080" FILE="/tmp/db_con_test.log" SUBJ="Connection lost" TEXT="Server notify: connection to somehost lost. Re-auth it, please." TO="[email protected]" STR1=`cat /tmp/db_con_test.log | grep Connected | cut -d' ' -f 1` STR2="Connected" LOC="/var/lock/db_con.loc" export "smtp=smtp.otherhost.com:25" # проверяем наличие файла, если есть - пишем в него лог подключения if [ -e $FILE ] then $CON > $FILE 2> /dev/null else echo "No file!" fi # Сравниваем переменные, если совпали (Connected = Connected) - удаляем файл блокировки и выходим if [ "$STR1" = "$STR2" ] then if [ -e $LOC ] then rm -r $LOC fi echo "Connection OK" exit 0 # если слова Connected нет - проверяем наличие файла блокировки. Если есть - ничего не отправляем, завершаем скрипт. else if [ -e $LOC ] then exit 1 # Если файла блокировки нет - отправляем письмо с текущей датой и создаём файл блокировки else echo $(date) $TEXT | mailx -s $SUBJ $TO | touch /var/lock/db_con.loc fi fi
Скрипт запускается по cron
-у, раз в 15 минут:
$ crontab -l */15 * * * * /home/setevoy/scripts/db_con_test-4.sh