INVOKE-RUN(8)

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 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.

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