summaryrefslogtreecommitdiff
path: root/rc.shutdown
blob: e4baa7ffbab7b5ed8e1edf8f76ff21c44b789b02 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
#
# /etc/rc.shutdown
#

. /etc/rc.conf
. /etc/rc.d/functions

# avoid staircase effect
/bin/stty onlcr

echo " "
printhl "Initiating Shutdown..."
echo " "

if [ -x /etc/rc.local.shutdown ]; then
	/etc/rc.local.shutdown
fi

if [ "$PREVLEVEL" = "3" -o "$PREVLEVEL" = "5" ]; then
	# Shutdown daemons
	let i=${#DAEMONS[@]}
	while [[ i -ge 0 ]]; do
		if [[ `echo ${DAEMONS[$i]} | grep '^[^\!]' | wc -l` -eq 1 ]]; then
			/etc/rc.d/${DAEMONS[$i]#@} stop
		fi
		let i=i-1
	done
	# find any leftover daemons and shut them down
	if [ -d /var/run/daemons ]; then
		for daemon in `ls /var/run/daemons`; do
			/etc/rc.d/$daemon stop
		done
	fi
fi

# Terminate all processes
stat_busy "Sending SIGTERM To Processes"
/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

stat_busy "Saving Random Seed"
/bin/dd if=/dev/urandom of=/var/run/random-seed count=1 bs=512 2> /dev/null
stat_done

stat_busy "Saving System Clock"
if [ "$HARDWARECLOCK" = "UTC" ]; then
	/sbin/hwclock --utc --systohc
else
	/sbin/hwclock --localtime --systohc
fi
stat_done

# Write to wtmp file before unmounting
/sbin/halt -w

stat_busy "Deactivating Swap"
/sbin/swapoff -a
stat_done

stat_busy "Unmounting Filesystems"
/bin/umount -a
stat_done

if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
	if [ -d /etc/lvm -a -x /sbin/lvm ]; then
		/bin/mount -n -t sysfs none /sys 2>/dev/null
		if [ -d /sys/block ]; then
			stat_busy "Deactivating LVM2 groups"
			/sbin/lvm vgchange --ignorelockingfailure -a n
			stat_done
			umount /sys
		fi
	fi
fi

stat_busy "Remounting Root Filesystem Read-only"
/bin/mount -n -o remount,ro /
stat_done

# Power off or reboot
if [ "$RUNLEVEL" = "0" ]; then
	printsep
	printhl "${C_H2}POWER OFF"
	/sbin/poweroff -d -f -h -i
else
	printsep
	printhl "${C_H2}REBOOTING"
	# adding kexec support
	[ -x /usr/sbin/kexec ] && /usr/sbin/kexec -e > /dev/null 2>&1
	/sbin/reboot -d -f -i
fi

# End of file
# vim: set ts=2 noet: