[Nut-upsuser] CyberPower USB UPS fails to cut power during shutdown

James Northcott / Chief Systems james at chiefsystems.ca
Mon Jul 18 21:01:56 UTC 2011


Hi,

I have a CyberPower UPS connected to a Ubuntu karmic machine.  All 
functions are working well.  I can use upsc to see all the UPS 
parameters, power loss and battery low events are correctly detected, 
and shutdown is correctly initiated.  If I run upsdrvctl shutdown, the 
UPS cuts power immediately.

However, if I simulate a shutdown with upsmon -c fsd, the UPS fails to 
cut power.  The normal halt procedure completes, and my machine turns 
itself off and stays off.

The relevant part of the shutdown script is:

     flag=`sed -ne 's#^ *POWERDOWNFLAG *\(.*\)$#\1#p' /etc/nut/upsmon.conf`
     wait_delay=`sed -ne 's#^ *POWEROFF_WAIT= *\(.*\)$#\1#p' 
/etc/default/nut`
     if [ -f "$flag" ] ; then
       if $upsmon -K >/dev/null 2>&1 ; then
         log_action_msg "Shutting down the UPS ..."
#       log_action_msg "Restarting udev to give USB access"
#       /etc/init.d/udev start
#       sleep 10
         log_action_msg "Running $upsdrvctl shutdown"
         if $upsdrvctl shutdown ; then
           sleep 5
           log_action_msg "Waiting for UPS to cut the power"
           log_end_msg 0
         else
           log_action_msg "Shutdown failed."
           log_action_msg "Waiting for UPS batteries to run down"
           log_end_msg 0
         fi
         log_action_msg "UPS should now be off!"
         sleep 10
         if [ "$wait_delay" ] ; then
           log_action_msg " (will reboot after $wait_delay) ..."
           sleep "$wait_delay"
           /etc/init.d/reboot stop
         fi
       else
         log_action_msg "Power down flag is not set (UPS shutdown not 
needed)"
       fi
     else
         if [ -z "$flag" ] ; then
           log_daemon_msg   
"##########################################################"
           log_progress_msg "## POWERDOWNFLAG is not defined in 
/etc/nut/upsmon.conf ##"
           log_progress_msg 
"##                                                      ##"
           log_progress_msg "## Please read the Manual page 
upsmon.conf(5)           ##"
           log_progress_msg 
"##########################################################"
           log_end_msg 0
         fi
     fi

This is part of /etc/init.d/nut, which gets called by /etc/init.d/halt 
at the correct time.  This script is bundled with the ubuntu package 
(version 2.4.1-3ubuntu2)

If I run /etc/init.d/nut poweroff myself, the UPS receives the command 
and cuts power.  When I run the script directly, I see on the console:

Shutting down the UPS ...
Running /sbin/upsdrvctl shutdown

When the script is called from the halt routines, I see:

Shutting down the UPS ...
Will now halt

The "Will now halt" message is from /etc/init.d/halt, and indicates that 
we returned to that script instead of having the power cut as expected.

I thought that the problem might be that the USB device is no longer 
available, so I tried the commented lines above to restart udev to 
restore access to USB devices.  This didn't work.

I also tried specifying that the upsdrvctl command run as root, with 
$upsdrvctl -u root shutdown - this also didn't work.

Does anyone have any ideas on why the shutdown command is failing when 
run as part of the halt process?  Or do you have any pointers on 
debugging the halt process?

Thanks,

James



More information about the Nut-upsuser mailing list