busybox/examples/shutdown-1.0/script/do_shutdown
<<
>>
Prefs
   1#!/bin/sh
   2# We are called with stdin/out/err = /dev/null
   3
   4resetgracetime=60
   5
   6logfile="/var/log/reboot/`date '+%Y%m%d%H%M%S'`.log"
   7mkdir -p /var/log/reboot
   8
   9PATH=/sbin:/bin
  10
  11say() {
  12        printf "\r%s\n\r" "$*"
  13}
  14
  15# Since there is a potential for various fuckups during umount,
  16# we start delayed hard reboot here which will forcibly
  17# reboot hung box in a remote datacenter a thousand miles away ;)
  18if test "$1" = "-r"; then
  19        ./hardshutdown -r "$resetgracetime" &
  20fi
  21
  22# Now, (try to) switch away from X and open a console. I've seen reboots
  23# hung on open("/dev/console"), therefore we do it _after_ hardshutdown
  24exec >/dev/console 2>&1
  25
  26if test "$1" = "-r"; then
  27        say "* `date '+%H:%M:%S'` Scheduled hard reboot in $resetgracetime seconds"
  28fi
  29
  30say "* `date '+%H:%M:%S'` Stopping tasks (see /var/log/reboot/* files)"
  31# log reboot event to file. %Y%m%d%H%M%S: YYYYMMDDHHMMSS
  32./stop_tasks >"$logfile" 2>&1
  33
  34# Dying X tends to leave us at semi-random vt. Try to fix that,
  35# but if it doesn't work, proceed anyway.
  36exec >/dev/null 2>&1
  37chvt 1 & sleep 1
  38exec >/dev/console 2>&1
  39
  40command -v ctrlaltdel >/dev/null && {
  41        say "* `date '+%H:%M:%S'` Setting Ctrl-Alt-Del to 'hard'"
  42        ctrlaltdel hard
  43}
  44
  45say "* `date '+%H:%M:%S'` Stopping storage devices"
  46# we can't log this: we are about to unmount everything!
  47./stop_storage "$@"
  48
  49# If we have cmdline params, start hardshutdown with them
  50test "$*" && ./hardshutdown "$@"
  51
  52# Just sleep endlessly...
  53say "* `date '+%H:%M:%S'` You may now power off or press Ctrl-Alt-Del to reboot"
  54while true; do sleep 32000; done
  55