[Nut-upsuser] Shutdown problem with Geek Squad GS1285U

Peter Selinger
Tue, 06 Feb 2007 18:51:33 -0000

For NUT to switch off your UPS at the end of the shutdown sequence,
you have to edit your shutdown scripts.

See INSTALL, "Configuring shutdowns for low battery events", item 11
"Edit your shutdown scripts: add upsdrvctl shutdown".

-- Peter

Gary Redden wrote:
>
> Nut will monitor the ups and shutdown Linux when the ups goes to low
> battery as it should. But the UPS is not shut down so the system will
> restart when the power is restored. If I switch the UPS off , restore
> power and switch the UPS on the system will restart. I have not been
> able to get nut to switch the UPS off after it brings the system down. I
> can get the UPS to switch off  with upscmd load.off. So the UPS can be
> controlled. Here is my SHUTDOWNCMD:
> SHUTDOWNCMD "/sbin/shutdown now -P"
> I also tried:
> SHUTDOWNCMD "/sbin/shutdown now -h"
> I found this script in /etc/init.d/nut and changed the paths to upsd and
> upsmon and used it.
> #! /bin/sh
> #
> # nut - Script to start and stop Network UPS Tools daemons
>
> PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin
> NAME=nut
> DESC="Network UPS Tools"
> DEFAULT=/etc/default/nut
>
> [ -f $DEFAULT ] || exit 0
> . $DEFAULT
>
> pid_dir=/var/run/nut
> upsmon_pid=${pid_dir}/upsmon.pid
> upsd_pid=${pid_dir}/upsd.pid
> upsd=/usr/local/ups/sbin/upsd
> upsmon=/usr/local/ups/sbin/upsmon
> upsdrvctl=/usr/local/ups/bin/upsdrvctl
> log=">/dev/null 2>/dev/null"
>
> # Check if /var/run/nut exists and has the correct perms
> check_var_directory() {
>         [ ! -d ${pid_dir} ] && mkdir -p ${pid_dir} \
>                 && chown root:nut ${pid_dir} \
>                 && chmod 770 ${pid_dir}
> }
>
> start_stop_server () {
>   case "$START_UPSD" in
>     y|Y|yes|YES|Yes)
>       case "$1" in
>         start)
>           ! $upsdrvctl start >/dev/null 2>&1  &&  \
>             echo -n " (upsdrvctl failed)"
>           start-stop-daemon -S -q -p $upsd_pid -x $upsd >/dev/null
2>&1
>           ;;
>         stop)
>           start-stop-daemon -K -o -q -p $upsd_pid -n upsd >/dev/null
2>&1
>           ! $upsdrvctl stop >/dev/null 2>&1  &&  \
>             echo -n " (upsdrvctl failed)"
>           ;;
>       esac
>       ;;
>     n|N|no|NO|No|*)
>       return 1
>       ;;
>   esac
> }
>
> start_stop_client () {
>   case "$START_UPSMON" in
>     y|Y|yes|YES|Yes)
>       case "$1" in
>         start)
>           start-stop-daemon -S -q -p $upsmon_pid -x $upsmon >/dev/null
2>&1
>           ;;
>         stop)
>           start-stop-daemon -K -o -q -p $upsmon_pid -n upsmon >/dev/null
> 2>&1
>           ;;
>       esac
>       ;;
>     n|N|no|NO|No|*)
>       return 1
>       ;;
>   esac
> }
>
> case "$1" in
>
>   start)
>     echo -n "Starting $DESC:"
>     check_var_directory
>     start_stop_server start && echo -n " upsd"
>     start_stop_client start && echo -n " upsmon"
>     echo "."
>     ;;
>
>   stop)
>     echo -n "Stopping $DESC:"
>     start_stop_server stop && echo -n " upsd"
>     start_stop_client stop && echo -n " upsmon"
>     echo "."
>     ;;
>
>   reload)
>     $upsd   -c reload >/dev/null 2>&1
>     $upsmon -c reload >/dev/null 2>&1
>     ;;
>
>   restart|force-reload)
>     echo -n "Restarting $DESC:"
>     start_stop_client stop
>     start_stop_server stop
>     sleep 5
>     check_var_directory
>     start_stop_server start && echo -n " upsd"
>     start_stop_client start && echo -n " upsmon"
>     echo "."
>     ;;
>
>   poweroff)
>     flag=`sed -ne 's#^ *POWERDOWNFLAG *\(.*\)$#\1#p'
> usr/local/ups/etc/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
>         echo "Shutting down the UPS ..."
>         sleep 1
>         if $upsdrvctl shutdown ; then
>           sleep 5
>           echo -n "Waiting for UPS to cut the power"
>         else
>           echo "Shutdown failed."
>           echo -n "Waiting for UPS batteries to run down"
>         fi
>         if [ "$wait_delay" ] ; then
>           echo " (will reboot after $wait_delay) ..."
>           sleep "$wait_delay"
>           /etc/init.d/reboot
>         fi
>       else
>         echo "Power down flag is not set (UPS shutdown not
needed)"
>       fi
>     else
>         if [ -z "$flag" ] ; then
>           echo
"##########################################################"
>           echo "## POWERDOWNFLAG is not defined in
/etc/nut/upsmon.conf ##"
>           echo "##
##"
>           echo "## Please read the Manual page upsmon.conf(5)
##"
>           echo
"##########################################################"
>         fi
>     fi
>     ;;
>
>   *)
>     N=/etc/init.d/$NAME
>     echo "Usage: $N
{start|stop|reload|restart|force-reload|poweroff}" >&2
>     exit 1
>     ;;
>
> esac
>
> exit 0
> Since I do not have much knowledge on how the Linux  system boots and
> shutdown I have spent the last several days searching for how the scrips
> /etc/init.d are supposed to work but every thing I have found is a
> little different than what I find on my Ubuntu system. Does this script
> ever get called with poweroff?
>
> _______________________________________________
> Nut-upsuser mailing list
> Nut-upsuser@lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/nut-upsuser
>