diff --git a/net/nut/files/nutshutdown b/net/nut/files/nutshutdown index e4fd962cd..86fe01bb9 100755 --- a/net/nut/files/nutshutdown +++ b/net/nut/files/nutshutdown @@ -4,11 +4,6 @@ # See /LICENSE for more information. # -. /lib/functions.sh - -mount -o remount,ro /overlay /overlay -mount -o remount,ro / / - stop_instance() { /etc/init.d/nut-server stop "$1" } @@ -16,26 +11,41 @@ stop_instance() { shutdown_instance() { local cfg="$1" config_get driver "$cfg" driver "usbhid-ups" - /lib/nut/${driver} -a "$cfg" -k + + # Only FSD if killpower was indicated + if [ -f /var/run/killpower ]; then + /lib/nut/"${driver}" -a "$cfg" -k + fi } -[ -f /var/run/killpower ] && { - [ -f /etc/config/nut_server ] && { - config_load nut_server +do_fsd() { + if [ -f /var/run/killpower ]; then + # Only make FS readonly if we are doing an FSD + mount -o remount,ro /overlay /overlay + mount -o remount,ro / / - # Can't FSD unless drivers are stopped - config_foreach stop_instance driver - # Driver will wait 'offdelay' before shutting down - config_foreach shutdown_instance driver - # So this can happen + . ${IPKG_INSTOOT}/lib/functions.sh + + if [ -f /etc/config/nut_server ]; then + config_load nut_server + + # Can't FSD unless drivers are stopped + config_foreach stop_instance driver + # Driver will wait 'offdelay' before shutting down + config_foreach shutdown_instance driver + # So this can happen + rm -f /var/run/killpower + poweroff + # And just in case + sleep 120 + # Uh-oh failed to poweroff UPS + reboot -f + else + poweroff + fi + else poweroff - # And just in case - sleep 120 - # Uh-oh failed to poweroff UPS - reboot -f - } || { - poweroff - } -} || { - poweroff + fi } + +do_fsd