[dm-devel] multipathd.init
Alasdair G Kergon
agk at redhat.com
Fri Apr 1 20:40:48 UTC 2005
Attached is a cleaned-up version of multipathd init script - at least
for Red Hat based systems.
While it uses the standard daemon-handling functions, it's still only
suitable for a few situations though.
If you have / on dm-multipath, the daemon has to be started from
the initrd - so you don't want it stopping/starting from init.d,
but you might want to HUP it.
If you have other system parts of your filesystem (e.g. /usr) you
want the daemon starting from rc.sysinit.
If you have data filesystems over multipath, you want something
to mount them after multipathd starts.
And you might also have cryptsetup, md, lvm2, kpartx involved
- in various combinations...
So you could have a multi-level startup with multiple instances
of multipathd each configured to manage only a subset of devices.
Then the init.d multipathd script would only kill the daemon
instance started during by the init.d script, and would leave
alone the instances managing / and /usr.
Or you could forget completely about init.d and /var/lock/subsys
and /var/run and just launch the daemon from the initrd or
failing that from rc.sysinit.
Then you would need a new mechanism to manage it.
(ie a dedicated client program that communicates with it e.g. via
shared memory)
I anticipate that something like this is the right way to go.
That client program could even be 'dmsetup' if the daemon functionality
could be incorporated into plug-ins: The various types of mirroring
have similar requirements, so it's sensible to have a single
daemon infrastructure for them all.
Alasdair
--
agk at redhat.com
-------------- next part --------------
#!/bin/bash
#
# /etc/rc.d/init.d/multipathd
#
# Starts the multipath daemon
#
# chkconfig: 2345 13 87
# description: Manage device-mapper multipath devices
# processname: multipathd
DAEMON=/sbin/multipathd
prog=`basename $DAEMON`
initdir=/etc/rc.d/init.d
lockdir=/var/lock/subsys
sysconfig=/etc/sysconfig
system=redhat
if [ $system = redhat ]; then
# Source function library.
. $initdir/functions
fi
test -x $DAEMON || exit 0
test -r $sysconfig/$prog && . $sysconfig/$prog
RETVAL=0
#
# See how we were called.
#
start() {
echo -n $"Starting $prog daemon: "
daemon $DAEMON
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $lockdir/$prog
echo
}
stop() {
echo -n $"Stopping $prog daemon: "
killproc $DAEMON
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f $lockdir/$prog
echo
}
restart() {
stop
start
}
reload() {
echo -n "Reloading $prog: "
trap "" SIGHUP
killproc $DAEMON -HUP
RETVAL=$?
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
condrestart)
if [ -f $lockdir/$prog ]; then
restart
fi
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=1
esac
exit $RETVAL
More information about the dm-devel
mailing list