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>