9059faa85a9031afa5b8a37da323ca31dfd291a4
[multipath-tools/.git] / multipathd / multipathd.init.suse
1 #! /bin/sh
2 # Copyright (c) 1995-2001 SuSE GmbH Nuernberg, Germany.
3 #
4 # Author: Hannes Reinecke <feedback@suse.de>
5 #
6 # init.d/routed
7 #
8 #   and symbolic its link
9 #
10 # /usr/sbin/rcrouted
11 #
12 ### BEGIN INIT INFO
13 # Provides:          multipathd
14 # Required-Start:    $syslog
15 # Required-Stop:
16 # Default-Start:     3 5
17 # Default-Stop:      0 1 2 4 6
18 # Description:       Starts multipath daemon
19 ### END INIT INFO
20
21 PATH=/bin:/usr/bin:/sbin:/usr/sbin
22 DAEMON=/sbin/multipathd
23 PIDFILE=/var/run/multipathd.pid
24
25 # Set the maximum number of open files
26 MAX_OPEN_FDS=4096
27
28 # Set to enable asynchronous daemon startup
29 DAEMON_ASYNC_STARTUP=
30
31 test -x $DAEMON || exit 5
32
33 . /etc/rc.status
34
35 # First reset status of this service
36 rc_reset
37
38 case "$1" in
39     start)
40         echo -n "Starting multipathd"
41
42         modprobe dm-multipath
43
44         # Set the maximum number of open files
45         if [ -n "$MAX_OPEN_FDS" ] ; then
46             ulimit -n $MAX_OPEN_FDS
47         fi
48
49         $DAEMON $ARGS
50
51         if [ -n "$DAEMON_ASYNC_STARTUP" ] ; then
52             rc_status -v
53             rc_exit
54         fi
55         # Wait for the daemon to start up
56         timeout=$MPATH_INIT_TIMEOUT
57         while [ ! -f $PIDFILE ] ; do
58             sleep 1
59             status=$(multipathd -k'show daemon' 2> /dev/null)
60             if [ "$status" == "configure" ] ; then
61                 # Daemon is still configuring, do not increase
62                 # the timeout
63                 continue
64             fi
65             timeout=$(( $timeout - 1 ))
66             [ $timeout -eq 0 ] && break
67         done
68         if [ $timeout -eq 0 ] ; then
69             echo -n " (no pidfile)"
70             rc_failed 1
71 t.suse
72         fi
73         
74         # Remember status and be verbose
75         rc_status -v
76         sleep 1
77         ;;
78     stop)
79         echo -n "Shutting down multipathd"
80         # Because of the way how multipathd sets up its own namespace
81         # and chroots to it, killproc cannot be used with this process.
82         # So implement a cruder version:
83         if [ -f $PIDFILE ]; then
84                 PID="$(cat $PIDFILE)"
85                 PROCNAME="$(ps -o cmd --no-headers $PID)"
86         fi
87
88         timeout=$MPATH_INIT_TIMEOUT
89         while [ $timeout -gt 0 ] ; do
90             status=$($DAEMON -k'show daemon' 2> /dev/null)
91             [ "$status" == "configure" ] && continue
92             [ "$status" == "running" ] && break
93             sleep 1
94             timeout=$(( $timeout - 1 ))
95         done
96
97         status=$($DAEMON -k'shutdown' 2> /dev/null)
98         if [ "$status" != "ok" ] ; then
99             if [ "$PROCNAME" == `basename $DAEMON` ]; then
100                 kill -TERM $PID
101         fi
102
103         # Remember status and be verbose
104         rc_status -v
105         ;;
106     try-restart)
107         ## Stop the service and if this succeeds (i.e. the 
108         ## service was running before), start it again.
109         $0 status >/dev/null &&  $0 restart
110
111         # Remember status and be quiet
112         rc_status
113         ;;
114     restart|force-reload)
115         ## Stop the service and regardless of whether it was
116         ## running or not, start it again.
117         $0 stop
118         $0 start
119
120         # Remember status and be quiet
121         rc_status
122         ;;
123     reload)
124         ## Like force-reload, but if daemon does not support
125         ## signalling, do nothing (!)
126
127         # If it does not support reload:
128         exit 3
129         ;;
130     status)
131         echo -n "Checking for multipathd: "
132
133         # Status has a slightly different for the status command:
134         # 0 - service running
135         # 1 - service dead, but /var/run/  pid  file exists
136         # 2 - service dead, but /var/lock/ lock file exists
137         # 3 - service not running
138
139         if [ -f $PIDFILE ]; then
140                 PID="$(cat $PIDFILE)"
141                 PROCNAME="$(ps -o cmd --no-headers $PID)"
142                 if [ "$PROCNAME" == "$DAEMON" ]; then
143                         (exit 0)
144                 else
145                         (exit 1)
146                 fi
147         else
148                 (exit 3)
149         fi
150
151         rc_status -v
152         ;;
153     probe)
154         ## Optional: Probe for the necessity of a reload,
155         ## give out the argument which is required for a reload.
156         ;;
157     *)
158         echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
159         exit 1
160         ;;
161 esac
162 rc_exit