---
name: "runsvdir"
section: "8"
platform: "linux"
package: "runit"
version: "2.2.0-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/runsvdir"
---

# runsvdir(8)

starts and monitors a collection of runsv(8) processes

## NAME

runsvdir - starts and monitors a collection of [runsv(8)](/runsv/8.md) processes

## SYNOPSIS

**runsvdir** \[-P\] *dir* \[ *log* \]

## DESCRIPTION

*dir* must be a directory. *log* is a space holder for a readproctitle log, and must be at least seven characters long or absent.

**runsvdir** starts a [**runsv**(8)](/runsv/8.md) process for each subdirectory, or symlink to a directory, in the services directory *dir*, up to a limit of 1000 subdirectories, and restarts a [**runsv**(8)](/runsv/8.md) process if it terminates. **runsvdir** skips subdirectory names starting with dots. [**runsv**(8)](/runsv/8.md) must be in **runsvdir**'s PATH.

At least every five seconds **runsvdir** checks whether the time of last modification, the inode, or the device, of the services directory *dir* has changed. If so, it re-scans the service directory, and if it sees a new subdirectory, or new symlink to a directory, in *dir*, it starts a new [**runsv**(8)](/runsv/8.md) process; if **runsvdir** sees a subdirectory being removed that was previously there, it sends the corresponding [**runsv**(8)](/runsv/8.md) process a TERM signal, stops monitoring this process, and so does not restart the [**runsv**(8)](/runsv/8.md) process if it exits.

If the *log* argument is given to **runsvdir**, all output to standard error is redirected to this *log*, which is similar to the daemontools' **readproctitle** log. To see the most recent error messages, use a process-listing tool such as [**ps**(1)](/ps/1.md). **runsvdir** writes a dot to the readproctitle log every 15 minutes so that old error messages expire.

## OPTIONS

- **-P**

  use [**setsid**(2)](/setsid/2.md) to run each [**runsv**(8)](/runsv/8.md) process in a new session and separate process group.

## SIGNALS

If **runsvdir** receives a TERM signal, it exits with 0 immediately.

If **runsvdir** receives a HUP signal, it sends a TERM signal to each [**runsv**(8)](/runsv/8.md) process it is monitoring and then exits with 111.

## SEE ALSO

[sv(8)](/sv/8.md), [runsv(8)](/runsv/8.md), [runsvchdir(8)](/runsvchdir/8.md), [runit(8)](/runit/8.md), [runit-init(8)](/runit-init/8.md), [chpst(8)](/chpst/8.md), [svlogd(8)](/svlogd/8.md), [utmpset(8)](/utmpset/8.md), [setsid(2)](/setsid/2.md)

http://smarden.org/runit/

## AUTHOR

Gerrit Pape \<pape@smarden.org\>
