ИБП защищает сервер от внезапного пропадания питания, но сам по себе не завершает работу операционной системы. Если батарея сядет, файловая система и базы данных могут пострадать. 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 превращает ИБП из пассивной страховки в управляемое устройство. Настройка занимает полчаса, но требует аккуратности: права на файлы, правильный драйвер и проверенная команда выключения. Сделайте резервную копию конфигурации, проверьте статусы при отключении питания и убедитесь, что после возврата сети сервер поднимается сам.