ИБП защищает сервер от внезапного пропадания питания, но сам по себе не завершает работу операционной системы. Если батарея сядет, файловая система и базы данных могут пострадать. NUT (Network UPS Tools) связывает ИБП с сервером: читает состояние по USB или сети, пишет журнал и запускает штатное выключение до того, как питание исчезнет окончательно.

Из чего состоит NUT

Пакет делится на несколько служб, и путаница между ними — частая причина ошибок.

  • Драйвер общается с конкретной моделью ИБП: usbhid-ups для USB-HID, apcsmart для последовательного протокола APC, snmp-ups для сетевых моделей.
  • upsd — демон, который хранит состояние и отдаёт его по протоколу NUT на порт 3493.
  • upsmon — монитор, который следит за upsd и выполняет команду выключения.
  • upslog и upsrw — вспомогательные утилиты для журнала и изменения параметров.

На одном сервере все компоненты обычно работают вместе. В схеме с несколькими машинами upsd стоит на хосте с ИБП, а остальные подключаются к нему как клиенты.

Установка и поиск ИБП

В Debian, Ubuntu и Linux Mint пакет ставится из штатного репозитория. После установки проверьте, видит ли система устройство.

sudo apt install nut
lsusb
nut-scanner -U
sudo systemctl status nut-driver-enumerator --no-pager

nut-scanner -U перебирает USB-устройства и печатает готовый фрагмент конфигурации: имя драйвера, порт и идентификаторы. Если ИБП не найден, проверьте кабель, питание и вывод dmesg. Виртуальная машина должна получить USB-устройство через проброс, иначе драйвер увидит только контроллер.

Настройка ups.conf

Секция описывает один ИБП. Имя в квадратных скобках станет идентификатором, который вы будете указывать в остальных файлах.

[apc]
    driver = usbhid-ups
    port = auto
    desc = "APC Back-UPS 650"
    pollinterval = 5

Файлы в /etc/nut содержат пароли, поэтому права должны быть ограничены. Владелец — root, группа — nut, режим 640. После правки проверьте драйвер вручную; если служба уже запущена, перезапустите её.

sudo chown root:nut /etc/nut/ups.conf
sudo chmod 640 /etc/nut/ups.conf
sudo upsdrvctl -D start apc

Ключ -D включает отладочный вывод. Если драйвер пишет Permission denied, проверьте права на USB-устройство и доступ пользователя nut к нему.

Режим, upsd и пользователи

В nut.conf задайте режим standalone, если сервер с ИБП обслуживает только себя. Для связки с клиентами по сети используется netserver.

MODE=standalone

В upsd.conf укажите адрес прослушивания. Для локального мониторинга достаточно петлевого интерфейса; для удалённых клиентов — адрес сервера в локальной сети.

LISTEN 127.0.0.1 3493
MAXCONN 64

Пользователь для мониторинга создаётся в upsd.users. В NUT 2.8 роли называются primary и secondary; старые master и slave оставлены для совместимости, но в новых конфигурациях лучше использовать актуальные.

[monuser]
    password = change-me-long
    upsmon primary

[remote]
    password = remote-secret
    upsmon secondary

[admin]
    password = another-secret
    actions = SET
    instcmds = ALL

upsmon и корректное выключение

Главный файл — upsmon.conf. Строка MONITOR связывает монитор с ИБП, а SHUTDOWNCMD задаёт команду завершения работы.

MONITOR apc@localhost 1 monuser change-me-long primary
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

MINSUPPLIES 1 означает, что выключение начнётся, когда ни одна питающая линия не получает ток. Для сервера с двумя блоками питания и двумя ИБП значение подбирают отдельно: 1 позволит работать на одной линии, 2 потребует обе. HOSTSYNC даёт клиентам время завершиться раньше сервера, DEADTIME не позволяет реагировать на одиночный сбой связи.

После правки включите и перезапустите службы:

sudo systemctl enable --now nut-server nut-monitor
sudo systemctl restart nut-server nut-monitor
sudo systemctl status nut-server nut-monitor --no-pager

Проверка статуса

Основная диагностика выполняется утилитой upsc. Она показывает заряд, входное напряжение, нагрузку и текущий статус.

upsc apc@localhost
upsc apc@localhost ups.status
upsc apc@localhost battery.charge
upsc -l

Статус OL означает работу от сети, OB — от батареи, LB — низкий заряд, CHRG — зарядку. Если upsc отвечает Data stale, драйвер не обновляет данные: смотрите его журнал и кабель. Команда upscmd -l apc@localhost показывает доступные команды, а upsrw — параметры, которые можно менять.

Для постоянного журнала удобно запускать upslog -s apc@localhost -l /var/log/nut/ups.log -i 60 через отдельную службу или таймер. Запись раз в минуту показывает динамику заряда и помогает отличить просадку батареи от краткого скачка напряжения. Уведомления на почту или в локальный webhook настраиваются через NOTIFYCMD и NOTIFYFLAG в upsmon.conf: скрипт получает тип события и текст, а дальше вызывает mail или curl.

Отдельно оцените время автономной работы. Значение battery.runtime показывает оценку в секундах, но она зависит от нагрузки и возраста батареи. Полезно один раз провести тест под реальной нагрузкой, записать время до статуса LB и настроить HOSTSYNC с запасом. Если сервер выключается дольше, чем живёт ИБП, уменьшайте нагрузку или добавляйте батареи.

Проверку полного сценария с upsmon -c fsd делайте только в окно обслуживания: команда инициирует немедленное выключение. На рабочем сервере безопаснее сначала проверить статусы, журнал и то, что служба запускается от нужного пользователя.

Удалённые клиенты

Если ИБП стоит на одном хосте, а выключаться должны несколько машин, на сервере с ИБП добавьте LISTEN 0.0.0.0 3493, разрешите порт 3493 в firewall только для доверенной подсети и создайте отдельного пользователя. На клиенте в upsmon.conf укажите:

MONITOR apc@192.168.10.5 1 remote remote-secret secondary
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"

Клиент не должен иметь права управлять ИБП, ему достаточно мониторинга. Проверьте upsc apc@192.168.10.5 с клиента и только потом запускайте nut-monitor.

Типичные ошибки

  • Драйвер не стартует: неверный driver, занят порт, нет прав на USB или устройство проброшено в другую ВМ.
  • Data stale: драйвер упал или ИБП перестал отвечать; смотрите journalctl -u nut-driver@apc.
  • Сервер не выключается: MINSUPPLIES больше числа линий, upsmon запущен не от root или команда завершения перекрыта политикой systemd.
  • После возврата питания машина не включается: проверьте настройки BIOS и POWERDOWNFLAG, а также поддержку команды самим ИБП.
  • Заряд показывается неверно: батарея изношена или модель требует калибровки; сверяйтесь с upsc и документацией производителя.

Итог

NUT превращает ИБП из пассивной страховки в управляемое устройство. Настройка занимает полчаса, но требует аккуратности: права на файлы, правильный драйвер и проверенная команда выключения. Сделайте резервную копию конфигурации, проверьте статусы при отключении питания и убедитесь, что после возврата сети сервер поднимается сам.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте