Запуск скриптов на события ИБП

()

Некоторое время назад был рассмотрен пример мониторинга ИБП с помощью Network UPS Tool (NUT) с отображением состояния на рабочем столе. А что если необходимо выполнять какие либо скрипты (например для отправки нотификаций)? Тут нет ничего сложного и далее будет показано как можно реализовать запуск скриптов для отправки СМС о состоянии ИБП.

Отправлять СМС мы будем с помощью нашего самодельного СМС-шлюза, который за годы работы показал себя исключительно с лучшей стороны. Отправлять СМС мы будем о следующих событиях:

  • ИБП перешёл на работу от батареи (пропала сеть);
  • ИБП вернулся на работу от сети;
  • Батарея ИБП разряжена;
  • Батарея ИБП требует замены.

Переходим к настройке. Мы будем дополнять конфигурацию из предыдущей статьи. Для начала добавим в файл "/etc/nut/upsmon.conf" строки:

# Путь к утилите upssched
NOTIFYCMD /sbin/upssched

# Флаги событий
# События:
# * ONLINE: переход на питание от сети
# * ONBATT: переход на питание от батареи
# * LOWBATT: низкий заряд батареи
# * REPLBATT: батарея нуждается в замене
#
# Флаги:
# * SYSLOG: логирование события в syslog
# * WALL: послать оповещение всем пользователям через команду wall
# * EXEC: Выполнить скрипт
NOTIFYFLAG ONLINE	SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT	SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT	SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT	SYSLOG+WALL+EXEC

Далее приводим файл "/etc/nut/upssched.conf" к виду:

# Скрипт, который будет запускаться на события от ИБП
CMDSCRIPT /etc/nut/upssched.sh

# События, на которые будет запускаться скрипт
# Каждая строка имеет вид:
# AT событие ИБП команда
# Звёздочка означает любой ИБП
AT ONLINE * EXECUTE online
AT ONBATT * EXECUTE onbatt
AT LOWBATT * EXECUTE lowbatt
AT REPLBATT * EXECUTE replbatt

# Сокет, используемый для внутренних межпроцессных коммуникаций
PIPEFN /var/lib/nut/upssched.pipe

# Файл блокировки для исключения "состояния гонки",
# которая возможна при обработке нескольких событий одновременно
LOCKFN /var/lib/nut/upssched.lock

Ну и наконец создаём скрипт "/etc/nut/upssched.sh". В нашем случае он будет выглядеть так:

#!/bin/sh

# Этот скрипт будет запускаться nut-клиентом
# Ему дополнительно передаются следующие переменные окружения:
# * NOTIFYTYPE: тип события. Например ONLINE (см. upssched.conf)
# * UPSNAME: имя ИБП, сгенерировавшего событие. Например main@localhost

# Основная часть выполняемой команды.
# Здесь нужно подставить правильный номер телефона администратора
SMSCMD="/usr/local/scripts/zabbix_smsc.pl +79123456789 msg"

# Перебираем возможные значения переданного скрипту параметра и шлём сообщение
case $1 in
        onbatt)
                        ${SMSCMD} "UPS \"${UPSNAME}\": Power lost"
                ;;
        online)
                        ${SMSCMD} "UPS \"${UPSNAME}\": Power restored"
                ;;
        lowbatt)
                        ${SMSCMD} "UPS \"${UPSNAME}\": Low battery"
                ;;
        replbatt)
                        ${SMSCMD} "UPS \"${UPSNAME}\": Please, replace battery"
                ;;
esac

Делаем скрипт исполняемым и перезапускаем NUT-клиент:

chmod +x /etc/nut/upssched.sh && service nut-client restart

Теперь можно проверить работу системы отключив ИБП от сети на несколько минут. В результате вам должны прийти две СМС: первая при потере питания и вторая при его восстановлении:

Пример SMS от Network UPS Tool

Если что-то пошло не так то надо внимательно проверить все конфигурационные файлы, указанные в них пути к утилитам ну и разумеется баланс счёта СМС-шлюза ;)

На этом всё. Приятной работы!

Ключевые слова: nut, nut-client, ups, sms.

Подписаться на обновления: RSS-лента Telegram канал Twitter

Комментарии:

Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2018 Вадим Калинников aka MooSE