perpetrate(5) persistent process supervision perpetrate(5)
NAME
perpetrate - conventions for runscripts
DESCRIPTION
perpd(8) operates on a pair of ``runscripts'' that are executed to
start and reset a service and an optional logger.
The runscripts recognized by perpd(8) are:
rc.log
Optional. Controls the logger for the main service.
rc.main
Required. Controls the main service.
The arguments, structure, and conventions for rc.log and rc.main are
identical. The illustrations below will usually be shown with rc.main,
but are equally applicable to rc.log unless noted otherwise.
perpd(8) will invoke service runscripts from within the service defini-
tion directory. For example, given some service definition directory
/etc/perp/foo
perpd(8) will switch into foo before invoking a runscript. This means
that foo will be the current working directory within the runscript
environment.
Runscripts are normally implemented as executable shell scripts, pre-
pared and installed by the system administrator. A runscript will be
executed at least twice during the life cycle of a service:
o to start the service
o after the service exits
A runscript will accordingly be structured to handle either of these
events.
Runscripts are invoked in the general form:
./rc.main target svname [ args... ]
The argument target will be set to one of two literal strings, either
``start'' or ``reset'', depending on whether perpd(8) is starting or
resetting the service. The svname argument will be set to the basename
of the service definition directory, such as ``foo'' for the service
directory foo. Any additional arguments depend on the target.
When using a ``start'' target, perpd(8) will invoke the runscript like
this:
./rc.main start svname
This follows the general form with no additional arguments. Given a
``start'' target, a runscript process should perform any initializa-
tions the service requires, and then proceed to replace itself (its
process ID) with the desired service running in the foreground. A
Bourne-compatible script such as sh(1) will replace itself by using the
exec command to start the service. This provides perpd(8) with the
process ID it needs for the actual running service, so that the service
may be properly monitored and controlled.
Normally the ``start'' target will result in a persistent process, a
long-running program that starts at system boot and continues until
system shutdown. A runscript called with a ``start'' target should
generally not return or exit, unless some error is encountered in ini-
tializing or starting the service.
As long-running as a service may be, whenever it does exit, for any
reason, perpd(8) will call the runscript again with a ``reset'' target.
A ``reset'' target will invoke the runscript with additional arguments
in either one of two forms, depending on whether the service exited
normally, or was terminated by a signal:
./rc.main reset svname exit exitcode
or
./rc.main reset svname signal signum signame
In the first case, where a service has terminated normally, the addi-
tional arguments include