<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=windows-1252">
  </head>
  <body smarttemplateinserted="true">
    <div id="smartTemplate4-template"><font size="2" face="Verdana">Hello,<br>
        <br>
        I have a problem with upssched working in my NUT setup. 
        upssched is not executing at all while running on battery.  I'm
        trying to execute some shell scripts before the shutdown
        begins.  I have 3 computers connected to a single UPS.  There is
        a Debian (testing) connected to the UPS via USB, and NUT was
        installed using a standard Debian repo using apt-get.  The two
        other boxes are Windows 10 Pro with no data connections to the
        UPS.  I have cygwin installed on the Windows boxes and I've
        written a shell script to shell in and shutdown the Windows
        boxes.  I had problems getting Windows NUT to work so I gave up
        and went with this model (was a netserver/netclient setup, now
        I'm standalone with upssched).  It seems I'm really close but I
        need to figure out the upssched issue.  I appreciate the support
        and patience as I see many variances of this problem come up on
        the mailing list.  I don't see my particular issue and I've
        checked the other threads and confirmed those particular fixes
        are implemented in my setup.<br>
        <br>
        I saw one thread discussing SELinux.  I do not have SELinux but
        I do have AppArmor running.  I don't see any indication in
        /var/log/syslog that AppArmor is blocking execution.  I also
        don't see any NUT specific config for AppArmor.  I run a pretty
        standard, out-of-the-box AppArmor setup.<br>
        <br>
        I see nothing in /var/log/syslog when the low battery condition
        hits and we just go straight to a shutdown of the Debian box
        while nothing happens on the windows boxes, which tells me that
        it's completely skipping upssched.  /etc/nut/upssched-cmd runs
        as expected when called via sudo manually.  Below are my NUT
        config files and some other (hopefully) useful information.<br>
        <br>
        NUT version:<br>
      </font><font size="2"><tt>$ upsd -V</tt><tt><br>
        </tt><tt>Network UPS Tools upsd 2.7.4</tt></font><font size="2"
        face="Verdana"><br>
        <br>
        nut.conf:<br>
      </font><font size="2"><tt>$ grep -Ev "^(#|\s*$)" /etc/nut/nut.conf</tt><tt><br>
        </tt><tt>MODE=standalone</tt></font><font size="2"
        face="Verdana"><br>
        <br>
        ups.conf:<br>
      </font><font size="2"><tt>$ grep -Ev "^(#|\s*$)" /etc/nut/ups.conf</tt><tt><br>
        </tt><tt>[myups1]</tt><tt><br>
        </tt><tt>    driver   = usbhid-ups</tt><tt><br>
        </tt><tt>    port     = auto</tt><tt><br>
        </tt><tt>    vendorid = 0764</tt><tt><br>
        </tt><tt>    desc     = "CyberPower 1350VA/CP1500AVR/CST135XLU
          on rockenfield"</tt><tt><br>
        </tt><tt>    pollinterval = 10</tt><tt><br>
        </tt><tt>    ignorelb</tt><tt><br>
        </tt><tt>    override.battery.charge.low = 80</tt><tt><br>
        </tt><tt>    override.battery.charge.warning = 90</tt><tt><br>
        </tt><tt>    override.battery.runtime.low = 900</tt></font><font
        size="2" face="Verdana"><br>
        <br>
        upsd.conf:<br>
      </font><font size="2"><tt>$ grep -Ev "^(#|\s*$)"
          /etc/nut/upsd.conf</tt><tt><br>
        </tt><tt>LISTEN 192.168.123.1 3493</tt><tt><br>
        </tt><tt>LISTEN 127.0.0.1 3493</tt></font><font size="2"
        face="Verdana"><br>
        <br>
        upsd.users:<br>
      </font><font size="2"><tt>$ grep -Ev "^(#|\s*$)"
          /etc/nut/upsd.users</tt><tt><br>
        </tt><tt>[nutmaster]</tt><tt><br>
        </tt><tt>    password = pass</tt><tt><br>
        </tt><tt>    upsmon master</tt><tt><br>
        </tt><tt>[nutslave]</tt><tt><br>
        </tt><tt>    password = pass</tt><tt><br>
        </tt><tt>    upsmon slave</tt></font><font size="2"
        face="Verdana"><br>
        <br>
        upsmon.conf:<br>
      </font><font size="2"><tt>$ grep -Ev "^(#|\s*$)"
          /etc/nut/upsmon.conf</tt><tt><br>
        </tt><tt>RUN_AS_USER nut</tt><tt><br>
        </tt><tt>MONITOR myups1@localhost:3493 1 nutmaster pass master</tt><tt><br>
        </tt><tt>MINSUPPLIES 1</tt><tt><br>
        </tt><tt>SHUTDOWNCMD "/sbin/shutdown --poweroff +0"</tt><tt><br>
        </tt><tt>NOTIFYCMD /sbin/upssched</tt><tt><br>
        </tt><tt>POLLFREQ 10</tt><tt><br>
        </tt><tt>POLLFREQALERT 5</tt><tt><br>
        </tt><tt>HOSTSYNC 15</tt><tt><br>
        </tt><tt>DEADTIME 15</tt><tt><br>
        </tt><tt>POWERDOWNFLAG /etc/killpower</tt><tt><br>
        </tt><tt>NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC</tt><tt><br>
        </tt><tt>RBWARNTIME 43200</tt><tt><br>
        </tt><tt>NOCOMMWARNTIME 300</tt><tt><br>
        </tt><tt>FINALDELAY 30</tt><tt><br>
        </tt><tt>CERTVERIFY 0</tt><tt><br>
        </tt><tt>FORCESSL 0</tt></font><font size="2" face="Verdana"><br>
        <br>
        -----<br>
        upssched.conf:<br>
      </font><font size="2"><tt>$ grep -Ev "^(#|\s*$)"
          /etc/nut/upssched.conf</tt><tt><br>
        </tt><tt>CMDSCRIPT /etc/nut/upssched-cmd</tt><tt><br>
        </tt><tt>PIPEFN /etc/nut/upssched.pipe</tt><tt><br>
        </tt><tt>LOCKFN /etc/nut/upssched.lock</tt><tt><br>
        </tt><tt>AT ONBATT myups1 EXECUTE onbatt</tt><tt><br>
        </tt><tt>AT LOWBATT myups1 EXECUTE lowbatt</tt></font><font
        size="2" face="Verdana"><br>
        <br>
        -----<br>
        upssched-cmd:<br>
      </font><tt><font size="2">$ cat /etc/nut/upssched-cmd<br>
          #!/bin/sh<br>
          #<br>
          # This script should be called by upssched via the CMDSCRIPT
          directive.<br>
          #<br>
          # Here is a quick example to show how to handle a bunch of
          possible<br>
          # timer names with the help of the case structure.<br>
          #<br>
          # This script may be replaced with another program without
          harm.<br>
          #<br>
          # The first argument passed to your CMDSCRIPT is the name of
          the timer<br>
          # from your AT lines.<br>
          OPTION="$1"<br>
          SCRIPT="$0"<br>
          <br>
          logger -t $SCRIPT "Script called with arg $OPTION"<br>
          <br>
          case $OPTION in<br>
              lowbatt)<br>
                  logger -t $SCRIPT "UPS Low Battery: Begin shutting
          down clients"<br>
                  /root/bin/remote-shutdown-nas<br>
                  sleep 1<br>
                  /root/bin/remote-shutdown-win 192.168.123.2<br>
                  sleep 1<br>
                  /root/bin/remote-shutdown-win 192.168.123.3<br>
                  sleep 20<br>
                  ;;<br>
              onbatt)<br>
                  logger -t $SCRIPT "UPS on battery"<br>
                  ;;<br>
              upsgone)<br>
                  logger -t $SCRIPT "The UPS has been gone for awhile"<br>
                  ;;<br>
              *)<br>
                  logger -t $SCRIPT "Unrecognized arg: $OPTION"<br>
                  ;;<br>
          esac<br>
          <br>
          exit 0</font></tt><font size="2" face="Verdana"><br>
        <br>
        UPS communications are working:<br>
      </font><font size="2"><tt>$ upsc myups1</tt><tt><br>
        </tt><tt>Init SSL without certificate database</tt><tt><br>
        </tt><tt>battery.charge: 100</tt><tt><br>
        </tt><tt>battery.charge.low: 80</tt><tt><br>
        </tt><tt>battery.charge.warning: 90</tt><tt><br>
        </tt><tt>battery.mfr.date: CPS</tt><tt><br>
        </tt><tt>battery.runtime: 1350</tt><tt><br>
        </tt><tt>battery.runtime.low: 900</tt><tt><br>
        </tt><tt>battery.type: PbAcid</tt><tt><br>
        </tt><tt>battery.voltage: 24.0</tt><tt><br>
        </tt><tt>battery.voltage.nominal: 24</tt><tt><br>
        </tt><tt>device.mfr: CPS</tt><tt><br>
        </tt><tt>device.model: CST135XLU</tt><tt><br>
        </tt><tt>device.serial: CR7GT2000910</tt><tt><br>
        </tt><tt>device.type: ups</tt><tt><br>
        </tt><tt>driver.flag.ignorelb: enabled</tt><tt><br>
        </tt><tt>driver.name: usbhid-ups</tt><tt><br>
        </tt><tt>driver.parameter.pollfreq: 30</tt><tt><br>
        </tt><tt>driver.parameter.pollinterval: 10</tt><tt><br>
        </tt><tt>driver.parameter.port: auto</tt><tt><br>
        </tt><tt>driver.parameter.synchronous: no</tt><tt><br>
        </tt><tt>driver.parameter.vendorid: 0764</tt><tt><br>
        </tt><tt>driver.version: 2.7.4</tt><tt><br>
        </tt><tt>driver.version.data: CyberPower HID 0.4</tt><tt><br>
        </tt><tt>driver.version.internal: 0.41</tt><tt><br>
        </tt><tt>input.voltage: 119.0</tt><tt><br>
        </tt><tt>input.voltage.nominal: 120</tt><tt><br>
        </tt><tt>output.voltage: 136.0</tt><tt><br>
        </tt><tt>ups.beeper.status: enabled</tt><tt><br>
        </tt><tt>ups.delay.shutdown: 20</tt><tt><br>
        </tt><tt>ups.delay.start: 30</tt><tt><br>
        </tt><tt>ups.load: 26</tt><tt><br>
        </tt><tt>ups.mfr: CPS</tt><tt><br>
        </tt><tt>ups.model: CST135XLU</tt><tt><br>
        </tt><tt>ups.productid: 0501</tt><tt><br>
        </tt><tt>ups.realpower.nominal: 810</tt><tt><br>
        </tt><tt>ups.serial: CR7GT2000910</tt><tt><br>
        </tt><tt>ups.status: OL</tt><tt><br>
        </tt><tt>ups.test.result: No test initiated</tt><tt><br>
        </tt><tt>ups.timer.shutdown: -60</tt><tt><br>
        </tt><tt>ups.timer.start: -60</tt><tt><br>
        </tt><tt>ups.vendorid: 0764</tt></font><font size="2"
        face="Verdana"><br>
        <br>
        Show file access:<br>
      </font><font size="2"><tt>$ ll /etc/nut/</tt><tt><br>
        </tt><tt>total 53,248</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   1,573 Mar 29 16:00 nut.conf</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   4,892 Mar 29 15:47 ups.conf</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   4,644 Dec  7  2017 upsd.conf</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   2,234 Mar 28 14:55 upsd.users</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut  15,352 Mar 29 21:32 upsmon.conf</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   4,099 Mar 30 08:45
          upssched.conf</tt><tt><br>
        </tt><tt>-rwxr-x--- 1 root nut     986 Mar 30 14:58
          upssched-cmd*</tt></font><font size="2" face="Verdana"><br>
        <br>
        Verify nut user can write to the dir:<br>
      </font><font size="2"><tt>$ sudo --user nut touch /etc/nut/test</tt><tt><br>
        </tt><tt>$ ll /etc/nut/</tt><tt><br>
        </tt><tt>total 53,248</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   1,573 Mar 29 16:00 nut.conf</tt><tt><br>
        </tt><tt>-rw-r--r-- 1 nut  nut       0 Mar 30 15:49 test</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   4,892 Mar 29 15:47 ups.conf</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   4,644 Dec  7  2017 upsd.conf</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   2,234 Mar 28 14:55 upsd.users</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut  15,352 Mar 29 21:32 upsmon.conf</tt><tt><br>
        </tt><tt>-rw-r----- 1 root nut   4,099 Mar 30 08:45
          upssched.conf</tt><tt><br>
        </tt><tt>-rwxr-x--- 1 root nut     986 Mar 30 14:58
          upssched-cmd*</tt></font><font size="2" face="Verdana"><br>
        <br>
        Verify shell script executes as nut user:<br>
      </font><font size="2"><tt>$ date; sudo --user nut
          /etc/nut/upssched-cmd dude</tt><tt><br>
        </tt><tt>Sat 30 Mar 2019 03:50:56 PM PDT</tt><tt><br>
        </tt><tt>$ grep upssched /var/log/syslog | tail -2</tt><tt><br>
        </tt><tt>Mar 30 15:50:56 rockenfield /etc/nut/upssched-cmd:
          Script called with arg dude</tt><tt><br>
        </tt><tt>Mar 30 15:50:56 rockenfield /etc/nut/upssched-cmd:
          Unrecognized arg: dude</tt></font><font size="2"
        face="Verdana"><br>
        <br>
        Any help is greatly appreciated.  Thanks a lot!<br>
        <br>
        -MikeD</font><br>
    </div>
  </body>
</html>