G. Pape
runit

Name

runsv - starts and monitors a service and optionally an appendant log service

Synopsis

runsv service

Description

service must be a directory.

runsv switches to the directory service and starts ./run. if ./run exits and ./finish exists, runsv starts ./finish. If ./finish doesn't exist or ./finish exits, runsv restarts ./run.

If ./run or ./finish exit immediatly, runsv waits a second before starting ./finish or restarting ./run.

If the file service/down exists, runsv does not start ./run immediately. The control interface (see below) can be used to start the service and to give other commands to runsv.

If the directory service/log exists, runsv creates a pipe, redirects service/run's and service/finish's standard output to the pipe, switches to the directory service/log and starts ./run (and ./finish) exactly as described above for the service directory. The standard input of the log service a redirected to read from the pipe.

runsv maintains status information in a binary format compatible to supervise(8) in service/supervise/status and service/log/supervise/status, and in a human-readable format in service/supervise/stat, service/log/supervise/stat, service/supervise/pid, service/log/supervise/pid.

Control

The named pipes service/supervise/control, and (optionally) service/log/supervise/control are provided to give commands to runsv. You can use svc(8) to control the service or just write one of the following characters to the named pipe:
u
Up. If the service is not running, start it. If the service stops, restart it.
d
Down. If the service is running, send it a TERM signal. If ./run exits, start ./finish if it exists. After it stops, do not restart service.
o
Once. If the service is not running, start it. Do not restart it if it stops.
p
Pause. If the service is running, send it a STOP signal.
c
Continue. If the service is running, send it a CONT signal.
h
Hangup. If the service is running, send it a HUP signal.
a
Alarm. If the service is running, send it a ALRM signal.
i
Interrupt. If the service is running, send it a INT signal.
  • User-defined 1. If the service is running, send it a USR1 signal.
  • User-defined 2. If the service is running, send it a USR2 signal.
  • t
    Terminate. If the service is running, send it a TERM signal.
    k
    Kill. If the service is running, send it a KILL signal.
    x or e
    Exit. If the service is running, send it a TERM signal. Do not restart the service. If the service is down, and no log service exists, runsv exits. If the service is down and a log service exists, send a TERM signal to the log service. If the log service is down, runsv exits. This command is ignored if it is given to service/log/supervise/control.

    For example, to send a TERM signal to /service/socklog-unix, either do # svc -t /service/socklog-unix
    or
    # echo -n t >/service/socklog-unix/supervise/control

    If echo(1) on your systems does not provide the -n option, leave it out, runsv ignores unknown characters written to the control pipe. echo(1) usally blocks if no runsv process is running in the service directory.

    Signals

    If runsv receives a TERM signal, it acts as if the character x was written to the control pipe.

    Exit Codes

    runsv exits 111 on an error on startup or if another runsv is running in service.

    runsv exits 0 if it was told to exit.

    See Also

    runit(8), runit-init(8), runsvdir(8), svc(8), supervise(8)

    http://smarden.org/runit/
    http://cr.yp.to/daemontools.html

    Author

    Gerrit Pape <pape@smarden.org>


    Table of Contents