Provided by: runit_2.1.2-44ubuntu2_amd64 bug

NAME

       invoke-run - runscript interpreter

SYNOPSIS

       /usr/bin/env /lib/run/invoke-run

DESCRIPTION

       The  runit supervision system uses scripts, called runscripts to start services. By convention, runscript
       for a service foo is located at /etc/sv/foo/run

       Debhelper addon dh_runit installs runscript according this convention.

       Runscript can be any executable file. Runscript can use invoke-run interpreter only if  it  is  installed
       according convention,

       To use invoke-run interpreter, runscript /etc/sv/foo/run for service foo must begin with following line:

           #!/usr/bin/env /lib/runit/invoke-run

       If  the  script  /usr/sbin/policy-rc.d  exists the policy layer is checked (see below).  If init.d script
       /etc/init.d/foo exists, it is invoked with stop argument to gracefully handle package upgrade to version,
       introducing runscript. After that, /bin/sh shell  interpret  rest  of  runscript,  with  some  additional
       environment set according following rules:

           A NAME=foo variable is exported.

           The /etc/default/runit file is interpreted with /bin/sh and all variable assignment are accessible to
           runscript.

           If  file  /etc/default/foo  exists,  it  is  interpreted with /bin/sh and all variable assignment are
           accessible to runscript.

           If directory /etc/sv/foo/conf exists, variables are set according  to  rules,  documented  in  envdir
           section of chpst(8) manual.

       If  both  /etc/default/foo file and /etc/sv/foo/conf directory define some variable, value from directory
       takes precedence.

SPECIAL ERROR CODE

       Looking in the foo service log it's possible to see messages in the form of

         invoke-run: ERROR [NNN] in foo: reason for the error

       These messages don't come from runsv itself but from invoke-run, the run file or  the  finish  file.  The
       purpose  of these message is to detail a permanent failure condition that prevents foo service from being
       up.  For each foo service, possible errors and messages are:

         invoke-run: foo binary not installed

           this happens when the package containing foo binary has been removed, but not purged.

         invoke-run: ERROR -1 in foo: runscript didn't exit normally

           this message comes from the finish file, but the exit code comes from runsv(8) and is  documented  in
           its manpage.

         invoke-run: WARNING for foo: disabled by local settings

           Some service specific setting prevent foo from starting; it's likely something in /etc/default/foo

         invoke-run: ERROR 162 in foo: configtest or early setup failed

           A  configuration  file  of foo is malformed and the configtest failed; foo log may contain additional
           info from the test itself.  Alternatively the runscript has failed to do some setup that is essential
           to the foo service.

         invoke-run: ERROR 170 in foo: a runtime hard dependency is missing

           A dependency failed the check and can't be bring up; to know dependencies of foo service look for "sv
           start" in "run" script.

FINISH FILE AND FINISH-DEFAULT

       Since version 2.1.2-36 the Debian runit package ships a /lib/runit/finish-default file that contains code
       that can be shared across different services.  This file can be sourced inside the regular finish file of
       a service, like the following example

        $ cat /etc/sv/foo/finish
        #!/bin/sh
        set -e
        . /lib/runit/finish-default "$@"

       Services that need to put specific code into the finish file  should  do  after  the  line  that  sources
       finish-default.  For  each foo service, finish-default file sources /etc/default/runit, export a NAME=foo
       variable and defines special error codes as described in the previous section.  Also, when  VERBOSE  mode
       is on, EXIT is trapped so that a 'foo stopped' message gets printed at the very end of the finish file.

POLICY-RC.D LAYER

       Since  version  2.1.2-41  invoke-run  support the policy-rc.d hack. When the /usr/sbin/policy-rc.d script
       exists, for each service invoke-run calls '/usr/sbin/policy-rc.d service' and check the return code.   On
       101  it  sets  the wanted status for the service as down and exits immediately.  Any other return code is
       ignored and invoke-run will proceed with starting the service.  The main use  case  for  the  policy-rc.d
       hack  is for the Debian Installer to prevent services to start in chroot during the installation process;
       however in the past the hack was used also by local admins to perform custom actions.  Local  admin  that
       want  to use the policy-rc.d layer should be aware that with runit the hack prevents the service to start
       under any condition, including during the boot sequence.  This is different from other init systems  like
       systemd or sysv, where the hack only prevents services to start when invoked via maintscripts.

SEE ALSO

       runsvdir(8), dh_runit(1), chpst(8)

                                                  Jan 21, 2019                                     INVOKE-RUN(8)