mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
b23f3f9960
Preparation for recommending configuration for each script next to the actual script. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
84 lines
1.8 KiB
Bash
Executable File
84 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" ] || \
|
|
CTDB_BASE=$(d=$(dirname "$0") ; cd -P "$d" ; dirname "$PWD")
|
|
|
|
. "${CTDB_BASE}/functions"
|
|
|
|
service_name="multipathd"
|
|
|
|
load_script_options
|
|
|
|
[ -n "$CTDB_MONITOR_MPDEVICES" ] || exit 0
|
|
|
|
ctdb_setup_state_dir "service" "$service_name"
|
|
|
|
# script_state_dir set by ctdb_setup_state_dir()
|
|
# shellcheck disable=SC2154
|
|
multipath_fail="${script_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 "ERROR: 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 "ERROR: 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
|
|
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"
|
|
;;
|
|
esac
|
|
|
|
exit 0
|