/ctdb/events.d/20.multipathd
http://github.com/brinkman83/bashrc · Shell · 99 lines · 69 code · 15 blank · 15 comment · 9 complexity · 8677e951ad07760d8c78e17233596c6a MD5 · raw file
- #!/bin/sh
- # ctdb event script for monitoring the multipath daemon
- #
- # Configure monitporing of multipath devices by listing the device serials
- # in /etc/ctdb/multipathd :
- # CTDB_MONITOR_MPDEVICES="device1 device2 ..."
- #
- . $CTDB_BASE/functions
- service_name="multipathd"
- loadconfig
- [ -z "$CTDB_MONITOR_MPDEVICES" ] && {
- exit 0
- }
- MPFAILURE=$CTDB_BASE/state/multipathd/failure
- multipathd_check_background()
- {
- for DEVICE in $CTDB_MONITOR_MPDEVICES; do
- # check that we can see all devices
- if [ -z "`multipath -ll $DEVICE`" ]; then
- echo Device $DEVICE not known to multipathd
- exit 1
- fi
- # check that all devices are active
- if [ -z "`multipath -ll $DEVICE|grep prio|grep active`" ]; then
- echo Device $DEVICE has no active paths
- exit 1
- fi
- done
- exit 0
- }
- multipathd_check()
- {
- # run the actual check in the background since the call to
- # multipath may block.
- (
- multipathd_check_background &
- pid="$!"
- timeleft=10
- while [ $timeleft -gt 0 ]; do
- timeleft=$(($timeleft - 1))
- # see if the process still exists
- /bin/kill -0 $pid > /dev/null 2>&1 || {
- # it doesn't exist, grab its exit status
- wait $pid
- [ $? = 0 ] || {
- echo "20.multipathd: multipath background update exited with status $?"
- touch $MPFAILURE
- exit 1
- }
- rm $MPFAILURE 2>/dev/null
- exit 0
- }
- sleep 1
- done
- echo "20.multipathd: Callout to multipath checks hung."
- touch $MPFAILURE
- exit 1
- ) &
- if [ -f $MPFAILURE ]; then
- return 1
- else
- return 0
- fi
- }
- case "$1" in
- startup)
- # create a state directory to keep/track the multipath device
- # state
- /bin/mkdir -p $CTDB_BASE/state/multipathd
- exit 0
- ;;
- monitor)
- multipathd_check
- [ "$?" = "0" ] || {
- echo 20.multipathd: monitoring of multipathing failed
- exit 1
- }
- exit 0
- ;;
- *)
- ctdb_standard_event_handler "$@"
- ;;
- esac
- exit 0