table of contents
INVOKE-RUN(8) | GNU/Linux System Adminstrator's manual | 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¶
January 21, 2019 |