Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Sep 2002 17:02:01 +0300
From:      Petri Riihikallio <Petri.Riihikallio@Metis.fi>
To:        freebsd-questions@FreeBSD.ORG, DougB@FreeBSD.ORG
Subject:   How to shut down cleanly by killing power
Message-ID:  <a05111b00b9b8be1e3fae@[192.168.0.2]>

next in thread | raw e-mail | index | archive | help
Hello

A couple of days ago I sent a message asking how to shut down a 
FreeBSD system when I KNOW the power will be off after the next 
script command.

Nobody has commented yet.

Am I the only one using an UPS with FreeBSD?

It doesn't feel right to crash after the UPS has run dry. (I don't 
have a generator.) About the first thing I was tought about Unix 
system administration was: "Always shut down properly". That's why I 
bought the UPS.

Is this a wrong place to ask this question? The other alternatives I 
could come up with were the -ISP and -hardware lists.

Thank you in advance for any thoughts.

At 22:20 +0300 22.9.2002, Petri Riihikallio wrote:
>Hello
>
>I have a FreeBSD 4.6.2 box and an UPS. I have chosen NUT 
>(http://www.exploits.org/nut) as my UPS monitor. Everything compiles 
>and runs fine. No problems with NUT. I have a problem with the 
>shutdown script.
>
>How do I shut down the system properly?
>
>The problem is that I want to issue the command "upsdrvctl 
>shutdown", which switches off the power from the UPS. What do I need 
>to do before that?
>
>To be more specific: When the AC power is down and the UPS is almost 
>exhausted, NUT creates a file "/etc/killpower" and starts system 
>shutdown with "shutdown -h now". Init then runs all scripts in 
>/usr/local/etc/rc.d with argument "stop". I have put a script like 
>this in my /usr/local/etc/rc.d
>
>-------------------------/usr/local/etc/rc.d/znut.sh:
>#! /bin/sh
>case $1 in
>start)
>	su nut -c /usr/local/libexec/upsdrvctl start
>	su nut -c /usr/local/sbin/upsd
>	/usr/local/upsmon
>	;;
>stop)
>	if (test -f /etc/killpower) then
>		echo "Killing the power, bye!"
>		/bin/sync
>		### WHAT TO DO HERE ?  ###
>		/usr/local/bin/upsdrvctl shutdown
>		### never makes it this far
>	else
>		killall upsmon
>		killall upsd
>		/usr/local/libexec/upsdrvctl stop
>	fi
>	;;
>*)
>         echo "Usage: $0: [ start | stop ]" 2>&1
>         exit 65
>	;;
>esac
>---------------------------------------------------
>
>I have called the script znut.sh, so it should run last after all 
>other shutdown scripts. (Nothing else runs after it in a powerfail 
>situation ;-) Can I rely on alphabetical ordering?
>
>When my script finds the "/etc/killpower" file it syncs the disks 
>and switches the UPS off. This is necessary, since the power might 
>return when the system is in the "Press any key to reboot"-state. 
>Then it would wait for the keypress indefinitely.
>
>NUT can't use "shutdown -r now", since the system might start a 
>reboot while the UPS still supplies power. NUT can't use "shutdown 
>-p now", since if the power is restored before the UPS runs dry, the 
>system won't boot automatically.
>
>The "upsdrvctl shutdown" avoids these deadlocks by killing power at 
>the UPS. When the AC power returns, the UPS first recharges, then it 
>starts supplying power and my BIOS is set up to boot when power 
>returns.
>
>My problem is that the disks aren't clean.
>
>If I put "umount -a" after the sync, I can't run the upsdrvctl from 
>/usr. Should I remount /usr read-only? Or should I move the NUT 
>programs to /bin and "umount -A". This would leave root dirty.
>
>I have read man pages for mount and umount. Both provide the -f 
>flag, but warn against using it. Could I make use of it?
>
>The "sync" man page tells that halt is better since it does more 
>than just a sync. Can I emulate these functions of halt from a 
>script?
>
>What happens after the rc.shutdown? Are there any other housekeeping 
>tasks after user scripts? I couldn't find any docs on that.

-- 
Cheers,
Petri

Metis / Petri Riihikallio
GSM: +358 400 505 939

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?a05111b00b9b8be1e3fae>