s6
Software
www.skarnet.org

# The s6-svscanboot program

`s6-svscanboot` starts a supervision tree, spearheaded by s6-svscan, while logging its own output, as well as the output of the tree's s6-supervise processes, into a catch-all logger that it itself supervises.

In other words, it starts a self-sufficient, self-contained supervision tree, that does not leak logs &emdash; apart from exceptionally rare error messages from the catch-all logger itself.

`s6-svscanboot` is meant to be used when an external service manager needs to start an s6 supervision tree. It prevents the supervision tree's logs from either flooding the upper service manager or being lost entirely.

## Interface

         s6-svscanboot [ -c devconsole ] [ -D catchalldir ] [ -m catchallmode ] [ -l catchalluser ] [ -o catchalloptions ] [ -d notif ] [ -X consoleholder ] [ -C services_max ] [ -L name_max ] [ -t rescan ] scandir

- `s6-svscanboot` creates the `/run/uncaught-logs` directory if it does not already exist, and changes its mode to 02750.
- It creates the scandir directory if it does not exist yet.
- It deletes any pre-existing `scandir/s6-svscan-log` directory, then recreates it as a suitable service directory running s6-log to log to `/run/uncaught-logs`. This is the service that will serve as the catch-all logger.
- It redirects its standard input to `/dev/null`, and its standard output and error to a named pipe that will be read by the catch-all logger. It performs the necessary magic so that the redirection happens even though that named pipe has no reader yet.
- It execs into s6-svscan, running on scandir.

## Exit codes

100
  Wrong usage
111
  System call failure

On success, `s6-svscanboot` does not exit, but execs into s6-svscan instead, which is supposed to remain running until the administrator decides to stop it or the machine shuts down.

## Options

`-c console`, `--console=console`
  Send the catch-all logger's error messages to device console. These will be the only error messages from the supervision tree that will not go into the catch-all logger. By default, this device is whatever `s6-svscanboot` stderr points to at invocation time.
`-D dir`, `--catchall-directory=dir`
  The directory where the s6-log catch-all will write and rotate the supervision tree's logs. Default is `/run/uncaught-logs`.
`-m mode`, `--catchall-mode=mode`
  What permissions the catch-all directory shall have. Default is 02750.
`-l user`, `--catchall-user=user`
  What user the catch-all logger shall run as. Default is the same user as the supervision tree, i.e. the user that launched `s6-svscanboot`. This option should only be used by root.
`-o options`, `--catchall-options=options`
  What control and selection directives the s6-log program shall use for logging its input. Directives should be separated by spaces. The options string will appear verbatim in the `scandir/s6-svscan-log/run` script, so caution should be used when using this option. Default is `t`.
`-d notif`, `--notification-fd=notif`
  Notify file descriptor notif when s6-svscan is ready. This option is passed directly to s6-svscan.
`-C services_max`, `--services-max=services_max`
  Maintain services for up to services_max service directories, including loggers. This option is passed directly to s6-svscan.
`-L name_max`, `--name-max=name_max`
  The maximum length of a name in the scan directory. This option is passed directly to s6-svscan.
`-t rescan`, `--timeout=rescan`
  Perform a scan every rescan milliseconds. This option is passed directly to s6-svscan.

## Notes

- `s6-svscanboot` is only useful in situations where it is beneficial for a supervision tree to log its own output. In other situations, it is better to launch s6-svscan directly.