mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
1ede20925f
Reduce the complexity, including the depth of background processes. Signed-off-by: Martin Schwenke <martin@meltin.net> (This used to be ctdb commit 49f077c475b078889ff0492fe7d567a64d6cb87c)
85 lines
1.8 KiB
Bash
Executable File
85 lines
1.8 KiB
Bash
Executable 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 ..."
|
|
#
|
|
|
|
[ -n "$CTDB_BASE" ] || \
|
|
export CTDB_BASE=$(cd -P $(dirname "$0") ; dirname "$PWD")
|
|
|
|
. $CTDB_BASE/functions
|
|
|
|
service_name="multipathd"
|
|
|
|
loadconfig
|
|
|
|
[ -n "$CTDB_MONITOR_MPDEVICES" ] || exit 0
|
|
|
|
ctdb_setup_service_state_dir
|
|
|
|
multipath_fail="${service_state_dir}/fail"
|
|
|
|
multipathd_check_background()
|
|
{
|
|
for _device in $CTDB_MONITOR_MPDEVICES; do
|
|
# Check multipath knows about the device
|
|
_out=$(multipath -ll "$_device")
|
|
if [ -z "$_out" ] ; then
|
|
echo "device \"${_device}\" not known to multipathd" >"$multipath_fail"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for at least 1 active path
|
|
if ! echo "$_out" | grep 'prio=.* status=active' >/dev/null 2>&1 ; then
|
|
echo "multipath device \"${_device}\" has no active paths" >"$multipath_fail"
|
|
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 </dev/null >/dev/null 2>&1 &
|
|
_pid="$!"
|
|
_timeleft=10
|
|
|
|
while [ $_timeleft -gt 0 ]; do
|
|
_timeleft=$(($_timeleft - 1))
|
|
|
|
# see if the process still exists
|
|
kill -0 $_pid >/dev/null 2>&1 || {
|
|
if wait $_pid ; then
|
|
return 0
|
|
else
|
|
echo -n "ERROR: "
|
|
cat "$multipath_fail"
|
|
rm -f "$multipath_fail"
|
|
return 1
|
|
fi
|
|
}
|
|
sleep 1
|
|
done
|
|
|
|
echo "ERROR: callout to multipath checks hung"
|
|
# If hung then this probably won't work, but worth trying...
|
|
kill -9 $_pid >/dev/null 2>&1
|
|
return 1
|
|
}
|
|
|
|
case "$1" in
|
|
monitor)
|
|
multipathd_check || die "multipath monitoring failed"
|
|
;;
|
|
|
|
*)
|
|
ctdb_standard_event_handler "$@"
|
|
;;
|
|
esac
|
|
|
|
exit 0
|