Managing HP Serviceguard A.11.20.20 for Linux, May 2013

while (( i < ${#SG_SERVICE_NAME[*]} ))
do
case ${SG_SERVICE_CMD[i]} in
*monitor.sh*) # found our script
found=1
break
;;
*)
;;
esac
(( i = i + 1 ))
done
if (( found == 0 ))
then
sg_log 0 "ERROR: monitoring service not configured!"
ret=1
fi
if (( ret == 1 ))
then
sg_log 0 "Script validation for $SG_PACKAGE_NAME failed!"
fi
return $ret
}
function start_command
{ sg_log 5 "start_command"
# log current PEV_MONITORING_INTERVAL value, PEV_ attribute can be changed
# while the package is running
sg_log 0 "PEV_MONITORING_INTERVAL for $SG_PACKAGE_NAME is $PEV_MONITORING_INTERVAL"
return 0
}
function stop_command
{
sg_log 5 "stop_command"
# log current PEV_MONITORING_INTERVAL value, PEV_ attribute can be changed
# while the package is running
sg_log 0 "PEV_MONITORING_INTERVAL for $SG_PACKAGE_NAME is $PEV_MONITORING_INTERVAL"
return 0
}
typeset -i exit_val=0
case ${1} in
start)
start_command $*
exit_val=$?
;;
stop)
stop_command $*
exit_val=$?
;;
validate)
validate_command $*
exit_val=$?
;;
*)
sg_log 0 "Unknown entry point $1"
;;
esac
exit $exit_val
4.8.11.1 Using Serviceguard Commands in an External Script
You can use Serviceguard commands (such as cmmodpkg) in an external script. These commands
must not interact with the package itself (that is, the package that runs the external script) but can
interact with other packages. But be careful how you code these interactions.
If a Serviceguard command interacts with another package, be careful to avoid command loops.
For instance, a command loop might occur under the following circumstances. Suppose a pkg1
script does a cmmodpkg -d of pkg2, and a pkg2 script does a cmmodpkg -d of pkg1. If both
pkg1 and pkg2 start at the same time, the pkg1 script now tries to cmmodpkg pkg2. But that
cmmodpkg command has to wait for pkg2 startup to complete. The pkg2 script tries to cmmodpkg
pkg1, but pkg2 has to wait for pkg1 startup to complete, thereby causing a command loop.
To avoid this situation, it is a good idea to specify a run_script_timeout and
halt_script_timeout for all packages, especially packages that use Serviceguard commands
in their external scripts. If a timeout is not specified and your package has a command loop as
described above, inconsistent results can occur, including a hung cluster.
NOTE: cmhalt operations interact with all the packages and should not be used from external
scripts.
4.8 Package Configuration Planning 129