persistent process supervision
perpd(8)                persistent process supervision                perpd(8)



NAME
       perpd - persistent process scanner/supervisor/controller

SYNOPSIS
       perpd [-hV] [-a secs ] [-g gid ] [ basedir ]

DESCRIPTION
       perpd  scans a directory to start and monitor a collection of services.
       It is the principal daemon of an active perp installation.

       perpd operates on a base directory containing a  set  of  perpetrate(5)
       service  definitions.   The  base directory may be given by the basedir
       argument on the command line.  If no basedir argument is  given,  perpd
       will  look  for  a  value  associated  with  the environmental variable
       PERP_BASE.  If neither of these is defined, perpd  will  operate  on  a
       compiled-in default directory, normally /etc/perp.

       Service  definitions  are installed, configured and activated as subdi-
       rectories of the base directory.  As perpd sequentially scans the  base
       directory,  it looks for subdirectory names not beginning with `.'.  If
       perpd then finds the `sticky' bit set on the subdirectory, it considers
       the service definition ``active'' and attempts to start the service.

       First  perpd  inspects  the service subdirectory.  If the optional file
       named rc.log is present and executable, perpd spawns a child process to
       run  it,  setting up a pipe to link its stdin to the stdout of the main
       service.  To start the logging process, perpd invokes  rc.log  as  fol-
       lows:

              ./rc.log start svname

       The  first  argument  is  the literal string ``start'', with the svname
       argument set to the basename of the subdirectory.

       After starting the optional logger, perpd proceeds  to  spawn  a  child
       process  to  run the required file named rc.main.  If a logging process
       has been defined as described above, perpd will also connect the stdout
       of the main service to the stdin of the logger.

       To start the main service, perpd invokes rc.main as follows:

              ./rc.main start svname

       The  conventions  and  arguments  for  starting rc.main are the same as
       those described for rc.log above.

       perpd runs each child process for rc.main and rc.log in a  new  session
       and separate process group.  The current working directory of the child
       process is set to the service subdirectory.  The environment  for  each
       process is defined with the variable PERP_BASE set to the absolute path
       of the perpd base directory as described above.

       The files rc.main and rc.log are known as ``runscripts''.   The  result
       of  running  ``start''  on  a runscript should normally be a persistent
       process, some long-running program designed to start at system boot and
       continue  running  until  system  shutdown.   Runscript conventions and
       examples may be found in the perpetrate(5) manual.

       perpd monitors its ``start'' processes to make sure they continue  run-
       ning.   If any active service process terminates, perpd is triggered to
       reset and restart the service.

       To reset a process that has terminated from  a  ``start'',  perpd  will
       invoke  the  associated  runscript  again  in  either one of two forms,
       depending on whether the process exited normally, or was  killed  by  a
       signal:

              ./rc.main reset svname exit exitcode
       or
              ./rc.main reset svname signal <