s6
Software
skarnet.org

# The s6-svlisten1 program

s6-svlisten1 runs a program while listening on notifications from a supervised service, and blocks until said service goes up, or down.

s6-svlisten1 only waits for notifications; it never polls.

## Interface

         s6-svlisten1 [ -U | -u | -D | -d | -r | -R ] [ -t timeout ] servicedir prog...

- s6-svlisten1 checks the state of the servicedir service directory and monitor its state changes.
- It spawns prog... as a child right after getting the initial state of the service.
- It then blocks until the wanted state happens.

## Exit codes

- 0: success, the wanted state has been reached
- 1: the service was supposed to go up, but reported permanent failure
- 99: timed out
- 100: wrong usage
- 102: the s6-supervise process monitoring the service died
- 111: system call failed

## Options

- `-u` : up. s6-svlisten1 will wait until the service is up, as reported by s6-supervise. This is the default; it is not reliable, but it does not depend on specific support in the service programs. See this page for details.
- `-U` : really up. s6-svlisten1 will wait until the service is up and ready as reported by the daemon itself. This requires specific support in the service programs, and the use of the `notification-fd` file in the service directory. See the explanation on this page.
- `-d` : down. s6-svlisten1 will wait until the service is down.
- `-D` : really down. s6-svlisten1 will wait until the service is down and the cleanup script in `servicedir/finish` has finished executing (or has timed out and been killed).
- `-r` : restart. s6-svlisten1 will wait until the service has been started or restarted, i.e. they have been in the down state, then the up state.
- `-R` : restart and ready. s6-svlisten1 will wait until the service has been started or restarted and has notified readiness.
- `-t timeout` : if the requested event has not happened after timeout milliseconds, s6-svlisten1 will print a message to stderr and exit 99. By default, timeout is 0, which means no time limit.

## Notes

- s6-svlisten1 is the service-specific version of s6-ftrig-listen1. The point of s6-svlisten1 is to use it to spawn a program such as s6-svc, in order to send signals to a service while making sure to catch its state changes - thus avoiding the race condition that occurs when running s6-svc then s6-svwait sequentially.
- The s6-svlisten program is an extension of s6-svlisten1. It can watch the state of several services at once; however, its syntax makes it best used in execline scripts only.