persistent process supervision
runtool(8)                         runtools                         runtool(8)



NAME
       runtool - run a program in a configured process environment

SYNOPSIS
       runtool  [-hV]  [-0  argv0]  [<-a | -A> argfile] [-c chdir] [-C chroot]
       [-d] [<-e | -E> envfile] [-F fdset] [-L [:]lockfile  |  -P  [:]pidlock]
       [-m  umask] [-R <a|c|d|f|m|o|p|r|s|t>=<num|!>[:...]] [- s] [-S altpath]
       [-u user] [-U user] [-W] [-z secs] program [ args ...]

DESCRIPTION
       runtool modifies a process environment according to its  options,  then
       runs program with any additional args.

       If  program does not contain a ``/'' slash character, runtool will per-
       form a shell-like search for the executable using the PATH variable  in
       the current environment.

OPTIONS
       runtool  combines the functions of several individual runtools_intro(8)
       into a single utility.  The corresponding  utility  is  noted  in  each
       option  description,  and  may  be  referenced  there for more complete
       information.

       -0 argv0
              runargv0(8).  Sets up program to run with an argv[0] of argv0.

       <-a|-A> argfile
              runargs(8).  Runs program with arguments specified  in  argfile.
              The  -a  form  of  the  option  sets up any arguments taken from
              argfile to preceed any arguments given by args.  The -A form  of
              the  option  inverts  this order, so that any options taken from
              argfile will follow any arguments given by args.

       -c chdir
              chdir(2).  Changes the current working directory to chdir before
              running program.

       -C chroot
              chroot(2).   Sets up the root directory to chroot before running
              program.

       -d     rundetach(8).  Detaches from the  controlling  terminal  to  run
              program in the background.

       <-e|-E> envfile
              runenv(8).   Sets  up the environmental variables in the process
              of program according to definitions in envfile.  The -e form  of
              the  option  merges  any  variables  defined in envfile with the
              existing environment.  The -E form of the option defines the new
              environment  exclusively  according  to  envfile and ignores any
              existing environment.  As with runenv(8), the  argument  envfile
              may be either a file or a directory.

       -F fdset
              Sets  up  file descriptors according to the specification fdset,
              given as a single contiguous string in the form:

                     <fd> <op> <target> [: ...]

              Where:

              fd:    single ascii file descriptor numeral, 0..9

              op:    a single character from the set `<', `>', '+', or '='

              target:
                     Depends on op as follows: If op is  redirection  operator
                     '<',  `>',  or  '+', target is an absolute pathname (must
                     begin with `/'), or the special  character  `%'.   Other-
                     wise,  if op is the duplication operator '=', target is a
                     single ascii file descriptor numeral, 0..9, or  the  spe-
                     cial character '!'.

              The  operator  character  `<'  is used to specify redirection of
              input to fd from the file argument given in target.  The  opera-
              tor  characters  `>'  and `+' are used to specify redirection of
              output from fd to the file argument given by  target.   The  `>'
              redirection causes target to be overwritten, while the `+' oper-
              ator appends to any target that may already exist.  The  special
              target  character  `%' may be used as shorthand to represent the
              file /dev/null for either input or output redirection.

              The operator character `=' is used to specify duplication of the
              file descriptor given in fd to the file descriptor given in tar-
              get.  The special target character `!'  is  used  to  close  the
              file descriptor given in fd.

              Normally the fdset argument string will be enclosed in quotes to
              protect it from shell processing.

       -L [:]lockfile
              runlock(8).  Sets up a lockfile before running program.  If  the
              name  of  the lockfile is prefixed by the `:' character, runtool
              will block until a lock can  be  acquired.   Otherwise,  runtool
              will  exit immediately if an existing lock is found on the lock-
              file.  To write the pid of the process into lockfile, use the -P
              option instead.

       -m umask
              umask(2).  Sets up the file creation mask for program.

       -P [:]pidlock
              runlock(8).   Same  as the description for the -L option, except
              that the pid for the process is written into the lock file  pid-
              lock.

       -R rlims
              runlimit(8).  Sets up the soft resource limits for program where
              rlims is given as a single contiguous string in the form:

                     <rlim> = <value> [: ...]

              Where:

              rlim:  single character in the set `a', `c', `d', `f', `m', `o',
                     `p', `r', `s', or `t'.

              `=':   the literal character `='.

              value: A  positive  numeric value for the resource limit, or the
                     special character `!' used to specify ``unlimited'', that
                     is,  sets the soft limit equal to the current hard limit.

              The rlim arguments and their meanings are described in the  run-
              limit(8) manual.  Multiple rlimit specifications may be concate-
              nated with the  `:'  character.   Normally  the  rlims  argument
              string  will be enclosed in quotes to protect it from shell pro-
              cessing.

       -s     runsession(8).  Runs program  in  a  separate  session  and  new
              process group.

       -S altpath
              runtool  will  use a PATH-like string given in altpath to search
              for the executable program, rather than within  the  PATH  vari-
              able.   The altpath is only used to search for program, and does
              not affect any PATH variable that may already be set,  nor  does
              altpath persist in the environment of program.

       -u user
              runuid(8).   Sets  up program to run as the user-id and group-id
              of the system account given by user.

       -U user
              runenv(8).  Sets up the two variables UID and GID in  the  envi-
              ronment  of  program with the user-id and group-id of the system
              account given by user.  IMPORTANT:  This  option  does  not,  by
              itself, change the permissions with which program runs.  It only
              sets up a couple of environmental variables that  some  programs
              may use to subsequently change their own permissions.

       -z secs
              runpause(8).  Sleep for secs seconds, or until interrrupted by a
              signal, before running program.  An argument  of  0  will  cause
              runtool to pause indefinitely, or until interrupted by a signal,
              before running program.

       runtool also provides the following standard runtools_intro(8) options:

       -h     Help.  Print a brief usage message to stderr and exit.

       -V     Version.  Print the version number to stderr and exit.

OPERATING SEQUENCE
       The order in which runtool applies its operations is independent of the
       order in which the options are given on the command line.  The sequence
       that runtool takes is:

       o   process argfile and argv0

       o   process envfile

       o   process -U user

       o   detach

       o   setsid

       o   acquire lockfile/pidlock

       o   set umask

       o   setup file descriptors according to fdset

       o   setup resource limits

       o   chdir

       o   chroot

       o   setuid

       o   sleep

       o   finally execute program

       When necessary to achieve a different sequence of operations, more than
       one runtool invocation may be combined in an exec  chain,  and/or  com-
       bined  in  an exec chain with one or more of the other purpose-specific
       utilities of the runtools_intro(8) suite.

EXIT STATUS
       runtool exits with one of the following values:

       0      program was invoked and completed successfully.  In  this  case,
              the exit code is returned by the program, rather than by runtool
              itself.

       100    runtool failed because of a usage error, such as an invalid com-
              mand-line  option  or  argument.  In this case, runtool prints a
              brief error message and usage help to stderr on exit.

       111    runtool failed due to some system or resource  error.   In  this
              case,  runtool  prints  a  brief diagnostic message to stderr on
              exit.

       1-127  program was invoked and failed with its own non-zero  exit  sta-
              tus.

AUTHOR
       Wayne Marshall, http://b0llix.net/perp/

SEE ALSO
       runtools_intro(8),  runargs(8), runargv0(8), runchoom(8), rundetach(8),
       rundeux(8),    runenv(8),    runfile(8),    runlimit(8),    runlock(8),
       runpause(8), runsession(8), runtrap(8), runuid(8)



runtools-2.07                    January 2013                       runtool(8)