diff options
author | Denys Vlasenko | 2018-04-20 15:12:52 +0200 |
---|---|---|
committer | Denys Vlasenko | 2018-04-20 15:12:52 +0200 |
commit | c21dfaf836cf0eb5317035bc20395c751a205934 (patch) | |
tree | 1b9b812eb0153da450a7f9f14fd444dc0bc4b567 /examples/shutdown-1.0/script/do_shutdown | |
parent | e09c426456cfd030cc868d93bbcb2e0a6933cabb (diff) | |
download | busybox-c21dfaf836cf0eb5317035bc20395c751a205934.zip busybox-c21dfaf836cf0eb5317035bc20395c751a205934.tar.gz |
examples/shutdown-1.0: an example of reboot which does not signal init
For one, my inits know nothing about the concept of "shutting down the system".
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'examples/shutdown-1.0/script/do_shutdown')
-rwxr-xr-x | examples/shutdown-1.0/script/do_shutdown | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/examples/shutdown-1.0/script/do_shutdown b/examples/shutdown-1.0/script/do_shutdown new file mode 100755 index 0000000..0c1e0dc --- /dev/null +++ b/examples/shutdown-1.0/script/do_shutdown @@ -0,0 +1,54 @@ +#!/bin/sh +# We are called with stdin/out/err = /dev/null + +resetgracetime=60 + +logfile="/var/log/reboot/`date '+%Y%m%d%H%M%S'`.log" +mkdir -p /var/log/reboot + +PATH=/sbin:/bin + +say() { + printf "\r%s\n\r" "$*" +} + +# Since there is a potential for various fuckups during umount, +# we start delayed hard reboot here which will forcibly +# reboot hung box in a remote datacenter a thousand miles away ;) +if test "$1" = "-r"; then + ./hardshutdown -r "$resetgracetime" & +fi + +# Now, (try to) switch away from X and open a console. I've seen reboots +# hung on open("/dev/console"), therefore we do it _after_ hardshutdown +exec >/dev/console 2>&1 + +if test "$1" = "-r"; then + say "* `date '+%H:%M:%S'` Scheduled hard reboot in $resetgracetime seconds" +fi + +say "* `date '+%H:%M:%S'` Stopping tasks (see /var/log/reboot/* files)" +# log reboot event to file. %Y%m%d%H%M%S: YYYYMMDDHHMMSS +./stop_tasks >"$logfile" 2>&1 + +# Dying X tends to leave us at semi-random vt. Try to fix that, +# but if it doesn't work, proceed anyway. +exec >/dev/null 2>&1 +chvt 1 & sleep 1 +exec >/dev/console 2>&1 + +command -v ctrlaltdel >/dev/null && { + say "* `date '+%H:%M:%S'` Setting Ctrl-Alt-Del to 'hard'" + ctrlaltdel hard +} + +say "* `date '+%H:%M:%S'` Stopping storage devices" +# we can't log this: we are about to unmount everything! +./stop_storage "$@" + +# If we have cmdline params, start hardshutdown with them +test "$*" && ./hardshutdown "$@" + +# Just sleep endlessly... +say "* `date '+%H:%M:%S'` You may now power off or press Ctrl-Alt-Del to reboot" +while true; do sleep 32000; done |