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