Делюсь решением.
С несколькими разными ИБП IPPON при подключении по USB периодически возникает проблема - драйвер "теряет" ИБП (используется драйвер blazer_usb). Оказалось, что для восстановления работоспособности достаточно перезапустить "службу" драйвера:
service upsdrv restart
В результате я сделал "костыль": скрипт, который перезапускает сервис, вызывается из upsmon по событию "NOCOMM".
Спойлер
Ключевые места /etc/nut/upsmon.conf:
NOTIFYCMD /etc/nut/notifycmdhander
NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC
Настройки для sudo.
Строчка для /etc/sudoers:
upsmon ALL=(root) NOPASSWD: /bin/service upsdrv restart
Добавим пользователя upsmon в группу wheel - иначе он не сможет запустить sudo:
usermod -a -G wheel upsmon
Скрипт /etc/nut/notifycmdhander:
#!/bin/bash
# notifycmdhandler - script for NOTIFYCMD in the upsmon.conf
# It can use the environment variables NOTIFYTYPE and UPSNAME to know what has happened and on which UPS.
# Please insert into /etc/sudoers followed line:
# upsmon ALL=(root) NOPASSWD: /bin/service upsdrv restart
#
NUTDRIVERNAME=blazer_usb
UPSUSBVID=0665
UPSUSBPID=5161
GREP=/bin/grep
SUDO="/usr/bin/sudo -S"
LSUSB=/usr/bin/lsusb
SERVICE=/bin/service
LOGGER=/usr/bin/logger
Debug="daemon.debug"
Info="daemon.info"
Error="daemon.error"
try_restart_blaser_usb() {
# check usb device presented if the blazer_usb driver is used
# if result of grep is zero then device is connected and we may restart of blazer_usb (this is should restore connection the NUT with UPS)
[[ ${NUTDRIVERNAME} == "blazer_usb" && -n ${UPSUSBVID} && -n ${UPSUSBPID} ]] && ${LSUSB} | ${GREP} -q ${UPSUSBVID}:${UPSUSBPID}
if [[ $? -eq 0 ]]
then
${SUDO} ${SERVICE} upsdrv restart 2>&1 | logger -p ${Info} -t notifycmdhander
${LOGGER} -p ${Info} -t notifycmdhander "result of restart service upsdrv : $?"
else
${LOGGER} -p ${Info} -t notifycmdhander "USB device ${UPSUSBVID}:${UPSUSBPID} not found (NUTDRIVERNAME=${NUTDRIVERNAME})"
fi
}
${LOGGER} -p ${Debug} -t notifycmdhander "run: UPSNAME=${UPSNAME}, NOTIFYTYPE=${NOTIFYTYPE}, cmdline: $*"
[[ -n "${UPSNAME}" ]] || ( ${LOGGER} -p ${Error} "UPSNAME is not defined!" ; exit 1 )
[[ -n "${NOTIFYTYPE}" ]] || ( ${LOGGER} -p ${Error} "NOTIFYTYPE is nod defined!" ; exit 1 )
if [[ "${NOTIFYTYPE}" == "NOCOMM" ]] ; then
# Fix event "NOCOMM" (wall message "UPS IPPON@localhost is unavailable")
try_restart_blaser_usb
fi
Попутно общаюсь с разработчиками NUT, Charles Lepple порекомендовал попробовать драйвер nutdrv_qx (придётся собирать из исходников, в пакете nut-server-2.6.5-alt4.M70P.1 его нет)