Created
February 25, 2011 14:46
-
-
Save mrosset/843878 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# /etc/rc.single: Single-user startup script. | |
# | |
. /etc/rc.conf | |
. /etc/rc.d/functions | |
run_hook single_start | |
if [ "$PREVLEVEL" != "N" ]; then | |
# Find daemons NOT in the DAEMONS array. Shut these down first | |
if [ -d /var/run/daemons ]; then | |
for daemon in $(/bin/ls -1t /var/run/daemons); do | |
if ! in_array $daemon ${DAEMONS[@]}; then | |
stop_daemon $daemon | |
fi | |
done | |
fi | |
# Shutdown daemons in reverse order | |
let i=${#DAEMONS[@]}-1 | |
while [ $i -ge 0 ]; do | |
if [ "${DAEMONS[$i]:0:1}" != '!' ]; then | |
ck_daemon ${DAEMONS[$i]#@} || stop_daemon ${DAEMONS[$i]#@} | |
fi | |
let i=i-1 | |
done | |
# Terminate all processes | |
stat_busy "Sending SIGTERM To Processes" | |
run_hook single_prekillall | |
/sbin/killall5 -15 &> /dev/null | |
/bin/sleep 5 | |
stat_done | |
stat_busy "Sending SIGKILL To Processes" | |
/sbin/killall5 -9 &> /dev/null | |
/bin/sleep 1 | |
stat_done | |
run_hook single_postkillall | |
stat_busy "Starting UDev Daemon" | |
/sbin/udevd --daemon | |
stat_done | |
run_hook single_udevlaunched | |
# Trigger udev uevents | |
if /bin/pidof -o %PPID /sbin/udevd >/dev/null; then | |
stat_busy "Triggering UDev uevents" | |
/sbin/udevadm control --property=STARTUP=1 | |
/sbin/udevadm trigger --action=add | |
stat_done | |
fi | |
# Wait for udev uevents | |
if /bin/pidof -o %PPID /sbin/udevd >/dev/null; then | |
stat_busy "Waiting for UDev uevents to be processed" | |
/sbin/udevadm settle | |
/sbin/udevadm control --property=STARTUP= | |
stat_done | |
fi | |
run_hook single_udevsettled | |
# try syslog-NG first, then fall back to good ol' syslogd | |
if [ -x /etc/rc.d/syslog-ng ]; then | |
/etc/rc.d/syslog-ng start | |
elif [ -x /etc/rc.d/syslogd ]; then | |
/etc/rc.d/syslogd start | |
[ -x /etc/rc.d/klogd ] && /etc/rc.d/klogd start | |
fi | |
fi | |
run_hook single_end | |
if [ "$RUNLEVEL" = "1" ]; then | |
printsep | |
printhl "Entering single-user mode..." | |
# make sure /dev/initctl is in place | |
/bin/kill -HUP 1 | |
exec /sbin/init -t1 S | |
fi | |
# End of file | |
# vim: set ts=2 noet: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment