Adding Customer Defined Functions to the Package Control Script

You can add additional shell commands to the package control script to be executed whenever the package starts or stops. Enter these commands in the CUSTOMER DEFINED FUNCTIONS area of the script.

If your package needs to run short-lived processes, such as commands to initialize or halt a packaged application, you can also run these from the CUSTOMER DEFINED FUNCTIONS.

You can also use the CUSTOMER DEFINED FUNCTIONS to determine why a package has shut down; see “Determining Why a Package Has Shut Down” (page 154).

An example of this portion of the script follows, showing the date and echo commands logging starts and halts of the package to a file.

#START OF CUSTOMER DEFINED FUNCTIONS

#This function is a place holder for customer defined functions.

#You should define all actions you want to happen here, before the service is

#started. You can create as many functions as you need.

function customer_defined_run_cmds

{

# ADD customer defined run commands.

: # do nothing instruction, because a function must contain some command. date >> /tmp/pkg1.datelog

echo 'Starting pkg1' >> /tmp/pkg1.datelog test_return 51

}

#This function is a place holder for customer defined functions.

#You should define all actions you want to happen here, before the service is

#halted.

function customer_defined_halt_cmds

{

# ADD customer defined halt commands.

:# do nothing instruction, because a function must contain some command. date >> /tmp/pkg1.datelog

echo 'Halting pkg1' >> /tmp/pkg1.datelog

test_return 52

}

# END OF CUSTOMER DEFINED FUNCTIONS

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. These commands must not interact with the package itself.

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 pkg1 does

acmmodpkg -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/XP and EVA, 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.

Configuring a Legacy Package 307

Page 307
Image 307
HP manual Support for Additional Products, Adding Serviceguard Commands in Customer Defined Functions