c21dfaf836
For one, my inits know nothing about the concept of "shutting down the system". Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
65 lines
2.0 KiB
Bash
Executable File
65 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
|
|
|
# Usually, /sbin/ has symlinks named halt, reboot, poweroff
|
|
# (and also possibly shutdown) to e.g.
|
|
# /app/shutdown-1.0/script/shutdown (this file).
|
|
cd /app/shutdown-1.0/script || exit 1
|
|
test -x ./do_shutdown || exit 1
|
|
test -x ./hardshutdown || exit 1
|
|
|
|
# "reboot -f" -> "shutdown -f -r" -> "hardshutdown -r" -> immediate reboot
|
|
# "reboot" -> "shutdown -r" -> "do_shutdown -r"
|
|
# ^^^^^^^^^^^^^^^^^^ similarly for halt, poweroff.
|
|
# "shutdown" -> "do_shutdown" (everything killed/unmounted, but kernel not asked to do any poweroff etc)
|
|
force=""
|
|
test x"$1" = x"-f" && {
|
|
force="-f"
|
|
shift
|
|
}
|
|
test ! "$*" && test x"${0##*/}" = x"halt" && exec "$0" $force -h
|
|
test ! "$*" && test x"${0##*/}" = x"reboot" && exec "$0" $force -r
|
|
test ! "$*" && test x"${0##*/}" = x"poweroff" && exec "$0" $force -p
|
|
# We have something else than allowed parameters?
|
|
test x"$*" = x"" || test x"$*" = x"-h" || test x"$*" = x"-r" || test x"$*" = x"-p" || {
|
|
echo "Syntax: $0 [-f] [-h/-r/-p]"
|
|
exit 1
|
|
}
|
|
|
|
# Emergency shutdown?
|
|
test "$force" && {
|
|
exec ./hardshutdown "$@"
|
|
exit 1
|
|
}
|
|
|
|
# Normal shutdown
|
|
|
|
# We must have these executables on root fs
|
|
# (mount/umount aren't checked, all systems are ok versus that):
|
|
test -x /bin/killall5 -o -x /sbin/killall5 || exit 1
|
|
test -x /bin/ps -o -x /sbin/ps || exit 1
|
|
test -x /bin/date -o -x /sbin/date || exit 1
|
|
test -x /bin/xargs -o -x /sbin/xargs || exit 1
|
|
test -x /bin/wc -o -x /sbin/wc || exit 1
|
|
test -x /bin/cat -o -x /sbin/cat || exit 1
|
|
test -x /bin/sort -o -x /sbin/sort || exit 1
|
|
|
|
i="`ulimit -n`"
|
|
echo -n "Closing file descriptors $i-3... "
|
|
while test "$i" -ge 3; do
|
|
eval "exec $i>&-"
|
|
i=$((i-1))
|
|
done
|
|
|
|
echo "Shutting down. Please stand by..."
|
|
|
|
# setsid & /dev/null:
|
|
# make it a process leader & detach it from current tty.
|
|
# Why /dev/null and not /dev/console?
|
|
# I have seen a system which locked up while opening /dev/console
|
|
# due to the bug (?) in keyboard driver.
|
|
setsid env - PATH="$PATH" ./do_shutdown "$@" </dev/null >/dev/null 2>&1 &
|
|
|
|
while true; do read junk; done
|