]>
Commit | Line | Data |
---|---|---|
6e58c30e ER |
1 | #!/bin/sh |
2 | # | |
3 | # mcelog mcelog hardware error logging | |
4 | # | |
5 | # chkconfig: 35 02 98 | |
6 | # | |
7 | # description: Start the mcelog hardware error logging. \ | |
8 | # This logs and handles CPU hardware errors on x86 systems. | |
9 | # | |
10 | # processname: mcelog | |
11 | # config: | |
12 | # pidfile: | |
13 | # | |
14 | # $Id$ | |
15 | ||
16 | # Source function library | |
17 | . /etc/rc.d/init.d/functions | |
18 | ||
19 | # mcelog mode | |
20 | # valid values: daemon, trigger, cron | |
21 | # Recommended value daemon | |
22 | MCELOG_MODE=daemon | |
23 | ||
24 | # additional options to pass to the daemon | |
25 | # this only works in daemon mode | |
26 | # see the manpage for details. settings can be also | |
27 | # set in /etc/mcelog/mcelog.conf | |
28 | MCELOG_OPTIONS="" | |
29 | ||
30 | # Get service config - may override defaults | |
31 | [ -f /etc/sysconfig/mcelog ] && . /etc/sysconfig/mcelog | |
32 | ||
33 | # private settings | |
34 | # TODO: what about other cpu's? | |
35 | TRIGGER=/sys/devices/system/machinecheck/machinecheck0/trigger | |
36 | ||
37 | # configtest itself | |
38 | # must return non-zero if check failed | |
39 | # output is discarded if checkconfig is ran without details | |
40 | configtest() { | |
41 | if [ ! -r /dev/mcelog ]; then | |
42 | nls "%s not active" /dev/mcelog | |
43 | return 1 | |
44 | fi | |
45 | ||
46 | case "$MCELOG_MODE" in | |
47 | daemon) | |
48 | ;; | |
49 | trigger) | |
50 | if [ ! -f "$TRIGGER" ] ; then | |
51 | nls "No machine check capability" | |
52 | return 1 | |
53 | fi | |
54 | ;; | |
55 | cron) | |
56 | nls "mcelog not started in cron mode" | |
57 | return 0 | |
58 | ;; | |
59 | *) | |
60 | nls "Unknown mcelog mode %s. Valid are: daemon/trigger/cron" $MCELOG_MODE | |
61 | return 1 | |
62 | esac | |
63 | ||
64 | return 0 | |
65 | } | |
66 | ||
67 | # wrapper for configtest | |
68 | checkconfig() { | |
69 | local details=${1:-0} | |
70 | ||
71 | if [ $details = 1 ]; then | |
72 | # run config test and display report (status action) | |
73 | show "Checking %s configuration" "MCE Log"; busy | |
74 | local out | |
75 | out=$(configtest 2>&1) | |
76 | RETVAL=$? | |
77 | if [ $RETVAL = 0 ]; then | |
78 | ok | |
79 | else | |
80 | fail | |
81 | fi | |
82 | [ "$out" ] && echo >&2 "$out" | |
83 | else | |
84 | # run config test and abort with nice message if failed | |
85 | # (for actions checking status before action). | |
86 | configtest >/dev/null 2>&1 | |
87 | RETVAL=$? | |
88 | if [ $RETVAL != 0 ]; then | |
89 | show "Checking %s configuration" "MCE Log"; fail | |
90 | nls 'Configuration test failed. See details with %s "checkconfig"' $0 | |
91 | exit $RETVAL | |
92 | fi | |
93 | fi | |
94 | } | |
95 | ||
96 | start() { | |
97 | # Check if the service is already running? | |
98 | if [ -f /var/lock/subsys/mcelog ]; then | |
99 | msg_already_running "MCE Log" | |
100 | return | |
101 | fi | |
102 | ||
103 | checkconfig | |
104 | ||
105 | case "$MCELOG_MODE" in | |
106 | daemon) | |
107 | msg_starting "MCE Log" | |
108 | daemon /usr/sbin/mcelog --daemon $MCELOG_OPTIONS | |
109 | RETVAL=$? | |
110 | [ $RETVAL -eq 0 ] && touch /var/lock/subsys/mcelog | |
111 | ;; | |
112 | trigger) | |
113 | echo $MCELOG > "$TRIGGER" | |
114 | touch /var/lock/subsys/mcelog | |
de02e5fc | 115 | ;; |
6e58c30e ER |
116 | esac |
117 | } | |
118 | ||
119 | stop() { | |
120 | if [ ! -f /var/lock/subsys/mcelog ]; then | |
121 | msg_not_running "MCE Log" | |
122 | return | |
123 | fi | |
124 | ||
125 | case "$MCELOG_MODE" in | |
126 | daemon) | |
127 | # Stop daemons. | |
128 | msg_stopping "MCE Log" | |
129 | killproc mcelog -TERM | |
130 | rm -f /var/lock/subsys/mcelog | |
131 | ;; | |
132 | trigger) | |
133 | echo "" > "$TRIGGER" | |
134 | rm -f /var/lock/subsys/mcelog | |
de02e5fc | 135 | ;; |
6e58c30e ER |
136 | esac |
137 | } | |
138 | ||
139 | condrestart() { | |
140 | if [ ! -f /var/lock/subsys/mcelog ]; then | |
141 | msg_not_running "MCE Log" | |
142 | RETVAL=$1 | |
143 | return | |
144 | fi | |
145 | ||
146 | checkconfig | |
147 | stop | |
148 | start | |
149 | } | |
150 | ||
151 | rc_status() { | |
de02e5fc ER |
152 | case "$MCELOG_MODE" in |
153 | daemon) | |
6e58c30e ER |
154 | status mcelog |
155 | RETVAL=$? | |
de02e5fc ER |
156 | ;; |
157 | esac | |
6e58c30e ER |
158 | } |
159 | ||
160 | RETVAL=0 | |
161 | # See how we were called. | |
162 | case "$1" in | |
163 | start) | |
164 | start | |
165 | ;; | |
166 | stop) | |
167 | stop | |
168 | ;; | |
169 | restart) | |
170 | checkconfig | |
171 | stop | |
172 | start | |
173 | ;; | |
174 | try-restart) | |
175 | condrestart 0 | |
176 | ;; | |
177 | force-reload) | |
178 | condrestart 7 | |
179 | ;; | |
180 | checkconfig|configtest) | |
181 | checkconfig 1 | |
182 | ;; | |
183 | status) | |
184 | rc_status | |
185 | ;; | |
186 | *) | |
187 | msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|checkconfig|status}" | |
188 | exit 3 | |
189 | esac | |
190 | ||
191 | exit $RETVAL |