BASH: скрипт проверки соединения

Автор: | 11/18/2013
 

terminalСкрипт выполняет подключение к удалённому узлу и, в случае неудачной попытки, отправляет сообщение на почту.

Используются переменные:

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="user@mail.com"
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