SMS-уведомления с сервера о состоянии RAID

Жил-был домашний Сервер под Debian. И было у него 4 диска. И были два из них в Рейде, управляемом mdadm. И задумался Админ: «А неплохо бы получать уведомления когда Рейду плохо. Да чтоб приходили они в виде СМС на телефон». Сказано — сделано.

Есть два способа отправки СМС-сообщений:

  • с помощью USB 3G-модема или телефона;
  • через СМС шлюз в Интернете.

Я выбрал второй способ. Теперь необходимо найти СМС-шлюз, через который мы будем отсылать сообщения. Они различаются по стоимости отправки сообщений, способу взаимодействия (API), дополнительным функциям. По перечисленным параметрам меня больше устраивает sms.ru. На их стороне низкие тарифы, а также бесплатная отправка до 5 смс в день на свой номер. То есть можно пользоваться сервисом, не оплачивая ничего.

Напишем скрипт для отправки СМС, назовём его sendsms.sh:

#!/bin/sh
 
PHONE="7XXXXXXXXXX"
APIKEY="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
 
if [ $# = 1 ]
then
  curl -X GET 'http://sms.ru/sms/send?api_id='$APIKEY'&to='$PHONE'&text='$1
fi

Здесь необходимо вписать в соответствующие строки свой номер телефона (через семёрку без плюса) и ключ API, который можно получить на сайте.

Даём права скрипту на выполнение:

chmod +x ./sendsms.sh

Проверяем:

./sendsms.sh hello+world

Через несколько секунд вам на телефон должна придти СМС:

Чтобы узнать состояние RAID-массива можно прочитать файл /proc/mdstat. Получим что-то подобное:

user@SERVER:~$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[2] sdc1[0]
      1953382208 blocks super 1.2 [2/2] [UU]
 
unused devices: <none>

Здесь нас интересуют символы «[UU]» — это нормальное состояние RAID-массива. Если вместо одной из букв будет символ подчёркивания ([_U] или [U_]), то зеркало повреждено и необходима срочная замена одного из дисков.

Для контроля за состоянием напишем скрипт check_raid.sh:

#!/bin/sh
 
if [ -f /tmp/checkraid.alarm ]; then
  exit 0
fi
 
k1=`cat /proc/mdstat | grep _U | wc -l`
k2=`cat /proc/mdstat | grep U_ | wc -l`
 
if [ $k1 -ne 0 ]; then
  touch /tmp/checkraid.alarm
  /root/scripts/sendsms.sh Warning\!+RAID+failure
fi
 
if [ $k2 -ne 0 ]; then
  touch /tmp/checkraid.alarm
  /root/scripts/sendsms.sh Warning\!+RAID+failure
fi

Путь к файлу sendsms.sh меняем на свой.
Скрипт проверяет символы в выводе mdstat, и если имеется «опасная» последовательность, то происходит отправка смс. Также создаётся файл /tmp/checkraid.alarm для предотвращения повторной отправки смс. После устранения неисправности необходимо удалить этот файл вручную (после перезагрузки он удалится сам).

Теперь выполняем команду

crontab -e

В конец файла добавляем строку, после которой обязательно оставляем ещё пустую.

*/5 * * * * sudo /root/scripts/check_raid.sh &

Перезапускаем cron:

sudo service cron restart

Теперь наш скрипт будет запускаться каждые 5 минут и проверять состояние RAID.