#!/bin/bash
#При переносе сценария, необходимо изменить значение следующих переменных:
# XLOG, FILE_LA
#Папка расположения вспомогательной информации
XLOG=/home/akarak/xlog
#Файл содержимое которого проверяем
FILE_LA=/home/akarak/proc/loadavg
#Файл для отправки
FILE_ALARM=alarm.txt
#Файл содержит тело (содержимое) письма
FILE_BODY=mail_body.txt
#Адреса рассылки, можно перечислить через ","
MAIL_TO=имя@домен.ru
#Текучая дата
DAT_BEGIN=`date +%d-%m-%Y`
#Признак отправки письма
R0=`find $XLOG -name "MAIL_FLAG"`
#-z строка "пустая"
if [ -z "$R0" ] ; then #Если файла нет, то надо его создать
MAIL_FLAG=0
echo $MAIL_FLAG > $XLOG/MAIL_FLAG
fi
#Если загрузка превышант 20%, то создаем файл, на основании файла loadavg
awk '$1 >= 20' $FILE_LA > $XLOG/$FILE_ALARM
#ищем что файл alarm.txt не пустой
R1=`find $XLOG -name "$FILE_ALARM" -size 0`
read MAIL_FLAG < $XLOG/MAIL_FLAG
# -z строка "пустая"
# -eq равно
if [ -z "$R1" ] && [ $MAIL_FLAG -eq 0 ] ; then
#Если файл не пустой и письмо не отправлено
echo "send letter"
# -a прикрепляемый файл
# -s "Тема письма"
mutt -a $XLOG/$FILE_ALARM -s "Тема письма $DAT_BEGIN" $MAIL_TO < $XLOG/$FILE_BODY
MAIL_FLAG=1 #Ставим признак отправки письма
echo $MAIL_FLAG > $XLOG/MAIL_FLAG
fi
R2=`awk '$1 < 20' $FILE_LA`
# -n строка не "пустая"
if [ -n "$R2" ] && [ $MAIL_FLAG -eq 1 ] ; then
#Если загрузка нормальная (переменная $R2 пустая) и письмо отправлено
echo "delete alarm.txt"
rm $XLOG/$FILE_ALARM
MAIL_FLAG=0 #Ставим признак отправки письма
echo $MAIL_FLAG > $XLOG/MAIL_FLAG
fi
exit 0
Логика работы
(Если загрузка превышает, допустимую, отправляется письмо. И больше писем не отправлять, пока ситуация не стабилизируется)
1. При первом запуске сценария создается MAIL_FLAG
2. Проверяется содержимое файла $FILE_LA (пример содержимого: 29.09 0.13 0.11 3/383 13538, где 29.09 – это % загрузки), если % загрузки >= 20, то содержимое файла $FILE_ALARM становится НЕ пустым
3. Далее идет проверка [ -z "$R1" ] && [ $MAIL_FLAG -eq 0 ], если файл не пустой и письмо не отправлено, то отправляем письмо адресатам $MAIL_TO и ставим признак отправки письма MAIL_FLAG=1.
4.Далее идет проверка [ -n "$R2" ] && [ $MAIL_FLAG -eq 1 ], если загрузка нормальная (переменная $R2 пустая) и письмо отправлено, то удаляем файл $FILE_ALARM (файл для отправки по почте) и ставим признак отправки письма MAIL_FLAG=0.
5. Конец сценария
|