Managing Serviceguard 12th Edition, March 2006
Configuring Packages and Their Services
Creating the Package Control Script
Chapter 6 303
Adding Serviceguard Commands in Customer Defined Functions
You can add Serviceguard commands (such as cmmodpkg) in the
Customer Defined Functions section of a package control script.
However, these commands must not interact with the package itself.
If you do run Serviceguard commands from the package control script,
they must be run as background processes, otherwise the package will
hang. This is done by adding a "&" (ampersand) to the end of the
command line. For example: cmmodpkg -d <package-name> &
If a Serviceguard command interacts with another package, then you
need to check all packages with Serviceguard commands for the
possibility of a command loop. For instance, a command loop might occur
under the following circumstances. Suppose Pkg1 does a cmmodpkg -d of
Pkg2, and Pkg2 does a cmmodpkg -d of Pkg1. If both Pkg1 and Pkg2
start at the same time, Pkg1 tries to cmmodpkg Pkg2. However, that
cmmodpkg command has to wait for Pkg2 startup to complete. Pkg2 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 always specify a
RUN_SCRIPT_TIMEOUT and a HALT_SCRIPT_TIMEOUT for all packages,
especially packages that use Serviceguard commands in their control
scripts. If a timeout is not specified and your configuration has a
command loop as described above, inconsistent results can occur,
including a hung cluster.
Support for Additional Products
The package control script template provides exits for use with
additional products, including MetroCluster with Continuous Access/CA,
MetroCluster with EMC SRDF, and the HA NFS toolkit. Refer to the
additional product’s documentation for details about how to create a
package using the hooks that are provided in the control script.