[Nut-upsuser] Shutdown problem with Geek Squad GS1285U

Gary Redden
Tue, 06 Feb 2007 18:20:51 -0000

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?