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.