On Sat, 8 Aug 2020, Phil Stracchino wrote:
> (Actually, I wish I could set it by *low runtime*, not low charge. What
> I'd really like to be able to do is tell it, "Shut down these
> non-essential servers if we've been on battery power longer than five
> minutes. Shut down *everything* if remaining runtime drops below five
> minutes." But I don't see any way to do that without writing the
code
> myself.)
I've done the essentials of this by configuring upsmon differently on
essential and non-essential servers, and by using upssched.conf.
Here are some of the things you can do with upssched:
AT COMMBAD tripp at localhost START-TIMER upsreset 10
AT COMMOK tripp at localhost CANCEL-TIMER upsreset
AT ONBATT * EXECUTE sms-onbatt
AT ONLINE * EXECUTE sms-online
Not what you want, just illustrating the tools that can be scripted.
Here is a snippet from upssched-cmd:
case $1 in
upsreset)
logger -t upssched-cmd "The UPS has been gone for awhile,
resetting"
echo "$TS" "NOCOMM" >>$LOG
;;
sms-onbatt)
logger -t upssched-cmd "Sending OnBattery SMS"
echo "$TS" "SMS" \
"The Gathman Server has lost power and is on
battery.">>$LOG
;;
sms-online)
logger -t upssched-cmd "Sending OnLine SMS"
echo "$TS" "SMS" \
"Power has been restored to the Gathman Server."
>>$LOG
;;
*)
logger -t upssched-cmd "Unrecognized command: $1"
;;
esac
The $LOG file is watched (via inotify) by a process with different
privileges than nut. It sends sms and resets the braindead USB on UPS.
Also, early shutdown is easily accomplished for your non-essential
servers:
AT ONBATT * START-TIMER early-shutdown 2000
AT ONLINE * CANCEL-TIMER early-shutdown
AT ONBATT * EXECUTE onbatt
AT ONLINE * EXECUTE online
Late shutdown is done by setting LOW BATTERY shutdown to only set a timer,
which then starts the shutdown.
AT LOWBATT * START-TIMER late-shutdown 300
In ups.conf, you can override what the ups says for upsmon purposes:
[apc]
driver = usbhid-ups
port = auto
serial = "4B1717P20965"
desc = "Back-UPS XS 1300G"
vendorid = 051d
override.battery.runtime.low = 300
override.battery.charge.low = 15
ignorelb
In upsmon.conf, you add EXEC flag to pass the events to upssched:
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC