SUPERVISE-DAEMON(8)
๐ SUPERVISE-DAEMON(8) โ ok bestie, sit down, we're learning the daemon babysitter
Hiiii so this is SUPERVISE-DAEMON(8) out of the System Manager's Manual, and it's literally the page for the program that starts your daemon and picks it back up when it faceplants. ๐ซถ
โจ NAME โจ
supervise-daemon โ starts a daemon and restarts it if it crashes ๐ฆ
๐ธ SYNOPSIS ๐ธ
supervise-daemon servicename -a, --healthcheck-timer seconds -A,
--healthcheck-delay seconds -D, --respawn-delay
duration -d, --chdir path -e, --env var=value -g,
--group group -I, --ionice arg -k, --umask value
--notify fd:num -m, --respawn-max count -N, --nicelevel
level --oom-score-adj adj -p, --pidfile
supervisorpidfile -P, --respawn-period duration
--respawn-delay-step duration --respawn-delay-cap
duration -R, --retry arg -r, --chroot chrootpath -u,
--user user -0, --stdin file -1, --stdout logfile -2,
--stderr logfile -S, --start daemon [--] [arguments]
supervise-daemon servicename -K, --stop daemon -r, --chroot chrootpath
supervise-daemon servicename -s, --signal signal -r, --chroot chrootpath
๐ DESCRIPTION ๐
supervise-daemon is your one consistent way to start, stop and restart daemons. Iconic behavior, honestly. โจ
So here's the vibe check: if you don't hand it -K, --stop or -s, --signal, it just assumes you wanna start the daemon. Periodt.
โ ๏ธ Big one, bestie: supervise-daemon only works with daemons which do not fork. If your daemon has options to tell it not to fork, it should be configured to not fork. No fork. Not today. ๐
Here are the options to specify the daemon and how it should start or stop:
-u,--user user[:group]โ Start the daemon as the user and update$HOMEaccordingly, or stop daemons owned by the user. You can optionally append a group name here also. ๐-v,--verboseโ Print the action(s) that are taken just before doing them. It's giving "narrator voice" energy. ๐
The options are as follows:
-a,--healthcheck-timer secondsโ Run thehealthcheck()command, possibly followed by theunhealthy()command, every time this number of seconds passes. ๐ฉบ-A,--healthcheck-delay secondsโ Wait this long before the first health check. Let it settle, bestie. ๐-D,--respawn-delay durationโ Wait for the specified duration before restarting a daemon after it crashes. The default is0. Duration is an integer optionally followed by a unit. Supported units are:ms,sec,min,hour(defaults tosecif none is provided). โณ-d,--chdir pathโ chdir to this directory before starting the daemon.-e,--env VAR=VALUEโ Set the environment variableVARtoVALUE. ๐-g,--group groupโ Start the daemon as in the group.-I,--ionice class[:data]โ Modifies the IO scheduling priority of the daemon. Class can be0for none,1for real time,2for best effort and3for idle. Data can be from0to7inclusive. ๐ง-k,--umask modeโ Set the umask of the daemon.--notify fd:num | socket:readyโ Open file descriptornumas a pipe, and waits until the daemon writes a newline to it before exiting. Or waits forREADY=1in the datagram socket opened at$NOTIFY_SOCKET. ๐ฆ-m,--respawn-max countโ Sets the maximum number of times a daemon will be respawned. If a daemon crashes more than this number of times,supervise-daemonwill give up and exit. The default is10and0means unlimited. Ifrespawn-periodis also set, more thanrespawn-maxcrashes must occur duringrespawn-periodseconds to causesupervise-daemonto give up and exit. ๐ฅ-p,--pidfile supervisorpidfileโ Sets a path for the supervisor's pid file. Note that this is not the pid file of the process that is being supervised. Don't get it twisted. ๐-N,--nicelevel levelโ Modifies the scheduling priority of the daemon.--oom-score-adj adjโ Modifies the OOM score adjustment of the daemon. ๐-P,--respawn-period durationโ Sets the duration of a respawn period. See the description of--respawn-maxand--respawn-delayfor more information. Default is12sec.--respawn-delay-step durationโ Increase therespawn-delayby duration with every retry withinrespawn-period. Default is128ms. ๐--respawn-delay-cap durationโ Set the maximumrespawn-delayduration. Only active if--respawn-delay-stepis above0. Default is30sec.-R,--retry timeout | signal/timeoutโ The retry specification can be either a timeout in seconds or multiple signal/timeout pairs (likeSIGTERM/5). If this option is not given, the default isSIGTERM/5. ๐-r,--chroot pathโ chroot to this directory before starting the daemon. All other paths, such as the path to the daemon andchdirshould be relative to the chroot.-,--signal signalโ Instruct a supervisor to signal the process it is supervising. The process to communicate with is determined by the name of the service taken from theRC_SVCNAMEenvironment variable. (Yeah, the synopsis up top writes it as-s,--signalโ same option, chill. ๐ซถ)-u,--user userโ Start the daemon as the specified user. ๐-0,--stdin fileโ Redirect the standard input of the process tofile. Must be an absolute pathname, but relative to the path optionally given with-r,--chroot. The file can also be a named pipe. Input redirection assumes that the file exists already, while output redirection via-1,--stdoutor-1,--stderrcreates it, if it doesn't. ๐-1,--stdout logfileโ The same thing as-0,--stdinbut with the standard output.-2,--stderr logfileโ The same thing as-1,--stdoutbut with the standard error output.--stdout-logger cmdโ Runcmdas a child process redirecting the standard output to the standard input ofcmdwhen started with-background.Cmdmust be an absolute pathname, but relative to the path optionally given with-r,--chroot. This process must be prepared to accept input on stdin and be able to log it or send it to another location. ๐ฅ--stderr-logger cmdโ Runcmdas a child process and Redirect the standard error of the process to the standard input ofcmdwhen started with-background.Cmdmust be an absolute pathname, but relative to the path optionally given with-r,--chroot. This process must be prepared to accept input on stdin and be able to log it or send it to another location. ๐ฅ--capabilities cap-listโ Start the daemon with the listed inheritable, ambient and bounding capabilities. The format is the same as incap_iab(3). ๐--secbits sec-bitsโ Set the security-bits for the program. The numeric value of the security-bits can be found in<sys/secbits.h>header file. The format is the same as instrtoul(3).--no-new-privsโ Set the No New Privs flag for the program. SeePR_SET_NO_NEW_PRIVSprctl(2). ๐ซ
๐ ENVIRONMENT ๐
SSD_IONICELEVELcan also set the IO scheduling priority of the daemon, but the command line option takes precedence. ๐SSD_NICELEVELcan also set the scheduling priority of the daemon, but the command line option takes precedence.SSD_OOM_SCORE_ADJcan also set the OOM score adjustment of the daemon, but the command line option takes precedence.
Like, respectfully, the flag wins every time. Periodt. โจ
๐ NOTE ๐
supervise-daemon uses getopt(3) to parse its options, which allows it to accept the `--' option, which will cause it to stop processing options at that point. Any subsequent arguments are passed as arguments to the daemon to start and used when finding a daemon to stop or signal. ๐ง
๐ NOTE ๐
Bestie. Listen. If respawn-delay, respawn-max and respawn-period are not set correctly, it is possible to trigger a situation in which the supervisor will infinitely try to respawn a daemon. ๐ญ
To avoid this, if you change the values of --respawn-delay, --respawn-max or --respawn-period, always make sure the settings make sense.
For example, a respawn period of 5 seconds with a respawn max of 10 and a respawn delay of 1 second leads to infinite respawning since there can never be 10 respawns within 5 seconds. Do the math, babes. ๐งฎ
โญ NOTE โญ
Invoking supervise-daemon requires both the RC_SVCNAME environment variable to be set and the name of the service as the first argument on the command line, so it is best to invoke it inside a service script rather than manually. Fr fr, don't just raw-dog it in your terminal. ๐
๐ฆ SEE ALSO ๐ฆ
chdir(2), chroot(2), getopt(3), nice(2),
๐ HISTORY ๐
supervise-daemon first appeared in Debian.
This is a complete re-implementation with the process finding code in the OpenRC library (librc, -lrc) so other programs can make use of it. Slay, honestly โ sharing is caring. ๐
๐ธ AUTHORS ๐ธ
William Hubbs <w.d.hubbs@gmail.com>
okk that's the whole page, you made it to the end, I'm so proud of you ๐ซถ๐ This was SUPERVISE-DAEMON(8) from the OpenRC crew, dated April 27, 2016 โ yes that's a whole while ago and it's still iconic. Byeeee โจ๐
๐ฆ where this page comes from
- alpine 3.22: openrc-doc 0.62.6-r0 ยท BSD-2-Clause
- alpine 3.23: openrc-doc 0.63-r1 ยท BSD-2-Clause
- alpine 3.24: openrc-doc 0.63.2-r0 ยท BSD-2-Clause
- Copyright (c) 2007-2015 The OpenRC Authors
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms