UPSMON independent shutdown.
-
@stephenw10 nut is correctly monitoring the UPS on the nas box. I see on the UPS Status screen the device go offline if i shutdown the nas box for example, or if it runs a self-test
-
But it doesn't log the timer starting if the UPS goes on battery for example?
I have no way to test this unfortunately.
Steve
-
@stephenw10 so here is my config
upsmon.conf
NOTIFYCMD /usr/local/sbin/upssched POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 NOTIFYMSG ONLINE "UPS %s: On line power." NOTIFYMSG ONBATT "UPS %s: On battery." NOTIFYMSG LOWBATT "UPS %s: Battery is low." NOTIFYMSG REPLBATT "UPS %s: Battery needs to be replaced." NOTIFYMSG FSD "UPS %s: Forced shutdown in progress." NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding." NOTIFYMSG COMMOK "UPS %s: Communications (re-)established." NOTIFYMSG COMMBAD "UPS %s: Communications lost." NOTIFYMSG NOCOMM "UPS %s: Not available." NOTIFYMSG NOPARENT "upsmon parent dead, shutdown impossible." NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC NOTIFYFLAG FSD SYSLOG+WALL+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC NOTIFYFLAG REPLBATT SYSLOG+WALL NOTIFYFLAG NOPARENT SYSLOG+WALL RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5
upssched.conf (via filer package)
CMDSCRIPT /usr/local/bin/upssched-cmd PIPEFN /var/db/nut/upssched.pipe LOCKFN /var/db/nut/upssched.lock AT ONBATT * START-TIMER onbatt 300 AT ONLINE * CANCEL-TIMER onbatt online AT LOWBATT * EXECUTE lowbatt AT COMMBAD * START-TIMER commbad 30 AT COMMOK * CANCEL-TIMER commbad commok AT NOCOMM * EXECUTE commbad AT FSD * EXECUTE powerdown AT SHUTDOWN * EXECUTE powerdown
upssched-cmd
#! /bin/sh UPS="ups" STATUS=$( upsc $UPS ups.status ) CHARGE=$( upsc $UPS battery.charge ) CHMSG="[$STATUS]:$CHARGE%" # upssched-cmd --slave -- logger -i -t upssched-cmd Calling upssched-cmd $1 case $1 in online) MSG="$UPS, $CHMSG - power supply has been restored." ;; onbatt) MSG="$UPS, $CHMSG - power failure - save your work!" ;; lowbatt) MSG="$UPS, $CHMSG - shutdown now!" ;; *) logger -i -t upssched-cmd "Bad arg: \"$1\", $CHMSG" exit 1 ;; esac logger -i -t upssched-cmd $MSG
log file is showing
Nov 8 10:08:49 upssched 44022 exec_cmd(/usr/local/bin/upssched-cmd online) returned 127 Nov 8 10:08:49 upssched-cmd 44598 UPS - power supply had been restored. Nov 8 10:08:49 upssched-cmd 44492 Calling upssched-cmd online Nov 8 10:08:49 upsmon 61766 UPS ups@nas.net.lan: On line power. Nov 8 10:08:44 upssched 22770 exec_cmd(/usr/local/bin/upssched-cmd onbatt) returned 127 Nov 8 10:08:44 upssched-cmd 23262 UPS - power failure - save your work! Nov 8 10:08:44 upssched-cmd 23007 Calling upssched-cmd onbatt Nov 8 10:08:44 upsmon 61766 UPS ups@nas.net.lan: On battery.
what is the
"upssched 44022 exec_cmd(/usr/local/bin/upssched-cmd online) returned 127" -
That return code is usually telling you 'command not found' or similar.
Did you try running those from the command line?
The timer names seem to be defined in upper case but referenced as lower case.
Steve
-
@stephenw10 script doesn't do anything.
when running /usr/local/bin/upssched-cmd online, the prompt doesn't return and you have to ctl-c to break it.
-
It doesn't even write anything to the logs?
-
@stephenw10 here is what shows in the log
upssched 22770 exec_cmd(/usr/local/bin/upssched-cmd onbatt) returned 127
upssched-cmd 23262 UPS - power failure - save your work!
upssched-cmd 23007 Calling upssched-cmd onbatt
upsmon 61766 UPS ups@nas.net.lan: On battery.after further searching, i found that some of the lines were missing the open bracket, but the bigger issue is, this is a bash script (which is not installed). I have no idea how to convert it to sh
#!/usr/local/bin/bash -u logger -i -t upssched-cmd Calling upssched-cmd $1 UPS="eapeups" STATUS=$( upsc $UPS ups.status ) CHARGE=$( upsc $UPS battery.charge ) CHMSG="[$STATUS]:$CHARGE%" case $1 in (online) MSG="$UPS, $CHMSG - power supply has been restored." ;; (onbatt) MSG="$UPS, $CHMSG - power failure - save your work!" ;; (lowbatt) MSG="$UPS, $CHMSG - shutdown now!" ;; (*) logger -i -t upssched-cmd "Bad arg: \"$1\", $CHMSG" exit 1 ;; esac logger -i -t upssched-cmd $MSG
-
You can install bash if you really need to.
What part fails id you use sh?Steve
-
@gwaitsi said in UPSMON independent shutdown.:
but the bigger issue is, this is a bash script
Although bash is probably a more powerful shell, I guess the script's syntax could be re written in sh syntax.
-
@Gertjan is that something you could help with pls? i would have no clue as i am not familiar with either
-
First things first : extreme, but you won't regret it : do not use the build in GUI file editor.
Use a console or better : ssh access. You'll be having full control, you can see file permissions, attributes etc.The GUI file editor is only used by experts ... and they probably use when they want to fly blind.
@gwaitsi said in UPSMON independent shutdown.:
but the bigger issue is, this is a bash script (which is not installed)
I'm experimenting right now with this upssched-cmd ....
See here https://dan.langille.org/2020/09/07/monitoring-your-ups-using-nut-on-freebsd/ for guidelines and the entire https://networkupstools.org/ .....Be careful : you've seen that pfSense (re) creates /usr/local/etc/nut/upsmon.conf and other .conf files in that dircetory. Use the GUI NUT pages to add your own lines to these files.
-
@Gertjan hi, I created my files a linux text editor. I copied and pasted them into the filer package.
/usr/local/etc/nut/upssched.conf 0644 UPS Shutdown Scheduler Configuration /usr/local/bin/upssched-cmd 0755 UPS Shutdown Scheduler Command Script
The extra upsmon script commands were added to the advanced tab.
the log clearly shows the script is being triggered, but just i don't know what i am doing with the scripts to be able to convert it. -
@gwaitsi said in UPSMON independent shutdown.:
hi, I created my files a linux text editor
Again : use ssh directly, you'll feel @home right away.
I advise you to execute this on pfSEnse :
pkg install nano
I guess you know who 'nano' is ;)
I don't know what you mean with
/usr/local/etc/nut/upssched.conf 0644 UPS Shutdown Scheduler Configuration /usr/local/bin/upssched-cmd 0755 UPS Shutdown Scheduler Command Script
Btw : I have a Back-UPS 700 APC ups, hooked up using a USB cable.
These are my settings :
upsmon.conf : the strict minimum, as the other settings in upsmon.conf will be set to default. see upsmon.conf.example for the values.
The upsd.conf contains the LAN IPv4 and IPv6, as my pfSense NUT us a UPS master - I have a disk station NAS being the NUT slave.
The upsd.users section shows the login details of the NAS.
My /usr/local/etc/nut/upssched.conf file :
-r-xr-xr-x 1 root wheel 649 Nov 12 15:36 upssched-cmd
CMDSCRIPT /usr/local/etc/nut/upssched-cmd PIPEFN /var/db/nut/upssched.pipe LOCKFN /var/db/nut/upssched.lock AT ONBATT * START-TIMER onbatt 20 AT ONLINE * CANCEL-TIMER onbatt online AT LOWBATT * EXECUTE lowbatt AT COMMBAD * START-TIMER commbad 30 AT COMMOK * CANCEL-TIMER commbad commok AT NOCOMM * EXECUTE commbad AT FSD * EXECUTE powerdown AT SHUTDOWN * EXECUTE powerdown
Take note of the location of the "CMDSCRIPT " file : /usr/local/etc/nut/upssched-cmd file
See also : "onbatt 20" which means that I receive notifications by mail etc after "20 sec" - not the default 300 seconds.
Here is /usr/local/etc/nut/upssched-cmd file :
#! /bin/sh UPS="ups" STATUS=$( upsc $UPS ups.status ) CHARGE=$( upsc $UPS battery.charge ) CHMSG="[$STATUS]:$CHARGE%" # upssched-cmd --slave -- logger -i -t upssched-cmd Calling upssched-cmd $1 case $1 in online) MSG="$UPS, $CHMSG - power supply has been restored." ;; onbatt) MSG="$UPS, $CHMSG - power failure - save your work!" ;; lowbatt) MSG="$UPS, $CHMSG - shutdown now!" ;; upsgone) MSG="$UPS, $CHMSG - UPS has been gone for awhile" ;; *) logger -i -t upssched-cmd "Bad arg: \"$1\", $CHMSG" exit 1 ;; esac logger -i -t upssched-cmd $MSG
This is logged when I pull the plug :
Read from bottom to top.
I received the mails. -
@Gertjan said in UPSMON independent shutdown.:
#! /bin/sh
UPS="ups"
STATUS=$( upsc $UPS ups.status )
CHARGE=$( upsc $UPS battery.charge )
CHMSG="[$STATUS]:$CHARGE%"upssched-cmd --slave --
logger -i -t upssched-cmd Calling upssched-cmd $1
case $1 in
online)
MSG="$UPS, $CHMSG - power supply has been restored."
;;
onbatt)
MSG="$UPS, $CHMSG - power failure - save your work!"
;;
lowbatt)
MSG="$UPS, $CHMSG - shutdown now!"
;;
upsgone)
MSG="$UPS, $CHMSG - UPS has been gone for awhile"
;;
*)
logger -i -t upssched-cmd "Bad arg: "$1", $CHMSG"
exit 1
;;
esac
logger -i -t upssched-cmd $MSGi will give it a shot.
fyi - If you use nano to create upssched.conf and upssched-cmd the files will be lost if you have to re-install.
If you install the "Filer" package, you can create those files under the Diagnostics menu and the contents will be saved to config.xml, so you can transfer the settings to a new install.
-
You can also use the included Easy Editor
ee
which provides much the same functionality as nano.Steve
-
@gwaitsi said in UPSMON independent shutdown.:
If you install the "Filer" package,
True ! In fact, discovered yesterday that "Filer" wasn't the build-in GUI editor ...
I use the Notes package myself : for every change I made that can't be done with the GUI, thus stored for eternity, I take notes.
This forces me to re read the documentation if I want to implement changes. Not only pfSense changes over time ;)@stephenw10 said in UPSMON independent shutdown.:
ee
I know. nano is just a personal preference, as it exists on all my pfSenses, and linux based servers. I'm trying to limit my have-to-know keyboard short-cut list to a minimum as I'm stilling suffering from the vi syndrome.
-
So it is looking good so far, lost comms are from shutting down the service on truenas. forced shutdown from lost comms works.
Still need to test how long the battery on the dumb ups will last. It should last much longer than the apc ups which gives me about an hour for power to be restored.
i will have on rare occasions a use case when the power is gone for more than an hour and pfsense shuts down, but the battery doesn't die before power is restored. in such a use case, pfsense will need to be manually re-started.
Anyone got any ideas?
Nov 16 06:57:38 upsmon 98032 UPS ups@nas.net.lan: Communications (re-)established. Nov 16 06:57:33 upsmon 98032 UPS [ups@nas.net.lan]: connect failed: Connection failure: Connection refused Nov 16 06:57:28 upsmon 98032 UPS [ups@nas.net.lan]: connect failed: Connection failure: Connection refused Nov 16 06:57:23 upsmon 98032 UPS [ups@nas.net.lan]: connect failed: Connection failure: Connection refused Nov 16 06:57:18 upsmon 98032 UPS [ups@nas.net.lan]: connect failed: Connection failure: Connection refused Nov 16 06:57:13 upsmon 98032 UPS [ups@nas.net.lan]: connect failed: Connection failure: Connection refused Nov 16 06:57:08 upsmon 98032 UPS ups@nas.net.lan: Communications lost. Nov 16 06:57:08 upsmon 98032 Poll UPS [ups@nas.net.lan] failed - Server disconnected Nov 16 06:56:48 upsmon 98032 UPS ups@nas.net.lan: Communications (re-)established. Nov 16 06:56:43 upsmon 98032 UPS ups@nas.net.lan: Communications lost. Nov 16 06:56:43 upsmon 98032 Poll UPS [ups@nas.net.lan] failed - Server disconnected Nov 15 05:34:34 upsmon 98032 UPS ups@nas.net.lan: On line power. Nov 15 05:34:29 upsmon 98032 UPS ups@nas.net.lan: On battery. Nov 14 00:56:34 upssched-cmd UPS on battery too long, forced shutdown
final schedups-cmd
#! /bin/sh # # This script should be called by upssched via the CMDSCRIPT directive. # Here is a quick example to show how to handle a bunch of possible # timer names with the help of the case structure. # This script may be replaced with another program without harm. # The first argument passed to your CMDSCRIPT is the name of the timer # from your AT lines. # upssched-cmd --slave -- case $1 in onbattery) logger -t upssched-cmd "UPS on battery too long, forced shutdown" /usr/local/sbin/upsmon -c fsd ;; lowbattery) logger -t upssched-cmd "UPS on battery critical, forced shutdown" /usr/local/sbin/upsmon -c fsd ;; commbad) logger -t upssched-cmd "UPS communications missing too long, forced shutdown" /usr/local/sbin/upsmon -c fsd ;; powerdown) logger -t upssched-cmd "UPS communications missing too long, forced shutdown" /usr/local/sbin/upsmon -c fsd ;; *) logger -t upssched-cmd "Unrecognized command: $1" ;; esac
-
@gwaitsi said in UPSMON independent shutdown.:
Anyone got any ideas?
What is is the question ?
How to manually restart ?For the "AT ... timer commands", see the upssched.conf file.
-
@Gertjan the ups on the pfsense (Qotom J1900) is like a power adapter with a battery e.g. it is dumb. pfsense is triggered via truenas server which has a apc ups connected to it.
If the power comes back on before the pfsense powers down, all is good. it will run on battery and continue.
If the pfsense shutdowns, but the ups battery doesn't deplete, the J1900 will never see a loss of power and therefore wont know to turn back on, so has to be manually started.
Looking for ideas on how i could solve this scenario.
-