On Sun, 1 Aug 2021, Roger Price wrote:

* In a NUT induced shutdown, is it the /etc/ups/upsmon.conf directive SHUTDOWNCMD "systemctl hibernate" which causes the system shutdown, or is it the /opt/upssched-cmd-custom clause

 shutdown-timer)
   echo "Power failure hibernation: Calling upsmon -c fsd, $CHMSG" | wall
   upsmon -c fsd
   ;;

If you shut down because of this clause, when does "systemctl hibernate" get executed?

To answer my own question I went to 2.7.4 /clients/upsmon.c where I see line 1875:

   case 'c':
      if (!strncmp(optarg, "fsd", strlen(optarg)))
         cmd = SIGCMD_FSD;

I followed SIGCMD_FSD and I find in upsmon.c line 1363:

   sa.sa_handler = user_fsd;
   sigaction(SIGCMD_FSD, &sa, NULL);

I followed user_fsd and I find in upsmon.c line 1324:

   static void user_fsd(int sig)
   {
       upslogx(LOG_INFO, "Signal %d: User requested FSD", sig);
       userfsd = 1;
   }

I followed userfsd and I find in upsmon.c line 2002:

   /* check flags from signal handlers */
   if (userfsd)
      forceshutdown();

I followed forceshutdown and I find on upsmon.c line 639:

   /* time expired or all the slaves are gone, so shutdown */
   doshutdown();

I followed doshutdown and I find on upsmon.c line 445

   ret = system(shutdowncmd);

I followed shutdowncmd and I find in upsmon.c line 1063
that shutdowncommand is whatever has been declared with the keyword
SHUTDOWNCMD.

So the answer to my question is that David's /opt/upssched-cmd-custom shutdown-timer) clause with command "upsmon -c fsd" effectively executes the command specified by the upsmon.conf declaration SHUTDOWNCMD "systemctl hibernate", and that the NUT shutdown is clearly a NUT induced hibernation.

It might be useful in a future revision of man 8 upsmon.conf to explain that in

  -c _command_
     Send the command _command_ to the existing upsmon process. Valid
     commands are:
           fsd   shutdown all master UPSes (use with caution)

the "use with caution" means execution of whatever has been declared in upsmon.conf SHUTDOWNCMD.

It might also be useful to complete the SHUTDOWNCMD declaration with something like:

SHUTDOWNCMD "logger -t upssched-cmd-custom \"Calling upsmon -c fsd which calls\
             SHUTDOWNCMD systemctl hibernate\"; systemctl hibernate"

Roger

_______________________________________________
Nut-upsuser mailing list
[email protected]
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsuser

Reply via email to