1.\" Copyright (c) 1999 Berkeley Software Design, Inc. All rights reserved. 2.\" 3.\" Redistribution and use in source and binary forms, with or without 4.\" modification, are permitted provided that the following conditions 5.\" are met: 6.\" 1. Redistributions of source code must retain the above copyright 7.\" notice, this list of conditions and the following disclaimer. 8.\" 2. Redistributions in binary form must reproduce the above copyright 9.\" notice, this list of conditions and the following disclaimer in the 10.\" documentation and/or other materials provided with the distribution. 11.\" 3. Berkeley Software Design Inc's name may not be used to endorse or 12.\" promote products derived from this software without specific prior 13.\" written permission. 14.\" 15.\" THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND 16.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18.\" ARE DISCLAIMED. IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE 19.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25.\" SUCH DAMAGE. 26.\" 27.\" $FreeBSD$ 28.\" 29.Dd September 22, 2020 30.Dt DAEMON 8 31.Os 32.Sh NAME 33.Nm daemon 34.Nd run detached from the controlling terminal 35.Sh SYNOPSIS 36.Nm 37.Op Fl cfHrS 38.Op Fl p Ar child_pidfile 39.Op Fl P Ar supervisor_pidfile 40.Op Fl t Ar title 41.Op Fl u Ar user 42.Op Fl m Ar output_mask 43.Op Fl o Ar output_file 44.Op Fl s Ar syslog_priority 45.Op Fl T Ar syslog_tag 46.Op Fl l Ar syslog_facility 47.Op Fl R Ar restart_delay_seconds 48.Ar command arguments ... 49.Sh DESCRIPTION 50The 51.Nm 52utility detaches itself from the controlling terminal and 53executes the program specified by its arguments. 54Privileges may be lowered to the specified user. 55The output of the daemonized process may be redirected to syslog and to a 56log file. 57.Pp 58The options are as follows: 59.Bl -tag -width indent 60.It Fl c 61Change the current working directory to the root 62.Pq Dq Pa / . 63.It Fl f 64Redirect standard input, standard output and standard error to 65.Pa /dev/null . 66When this option is used together with any of the options related to file 67or syslog output, the standard file descriptors are first redirected to 68.Pa /dev/null , 69then stdout and/or stderr is redirected to a file or to syslog as 70specified by the other options. 71.It Fl H 72Close 73.Pa output_file 74and re-open it when signal SIGHUP is received, for interoperability with 75.Xr newsyslog 1 76and similar log rotation / archival mechanisms. If 77.Fl o 78is not specified, this flag is ignored. 79.It Fl S 80Enable syslog output. 81This is implicitly applied if other syslog parameters are provided. 82The default values are daemon, notice, and daemon for facility, priority, and 83tag, respectively. 84.It Fl o Ar output_file 85Append output from the daemonized process to 86.Pa output_file . 87If the file does not exist, it is created with permissions 0600. 88When this option is used together with options 89.Fl c and 90.Fl H 91the absolute path needs to be provided to ensure 92.Nm 93can re-open the file after a SIGHUP. 94.It Fl m Ar output_mask 95Redirect output from the child process stdout (1), stderr (2), or both (3). 96This value specifies what is sent to syslog and the log file. 97The default is 3. 98.It Fl p Ar child_pidfile 99Write the ID of the created process into the 100.Ar child_pidfile 101using the 102.Xr pidfile 3 103functionality. 104The program is executed in a spawned child process while the 105.Nm 106waits until it terminates to keep the 107.Ar child_pidfile 108locked and removes it after the process exits. 109The 110.Ar child_pidfile 111owner is the user who runs the 112.Nm 113regardless of whether the 114.Fl u 115option is used or not. 116.It Fl P Ar supervisor_pidfile 117Write the ID of the 118.Nm 119process into the 120.Ar supervisor_pidfile 121using the 122.Xr pidfile 3 123functionality. 124The program is executed in a spawned child process while the 125.Nm 126waits until it terminates to keep the 127.Ar supervisor_pidfile 128locked and removes it after the process exits. 129The 130.Ar supervisor_pidfile 131owner is the user who runs the 132.Nm 133regardless of whether the 134.Fl u 135option is used or not. 136.It Fl r 137Supervise and restart the program after a one-second delay if it has 138been terminated. 139.It Fl R Ar restart_delay_seconds 140Supervise and restart the program after the specified delay 141if it has been terminated. 142.It Fl t Ar title 143Set the title for the daemon process. 144The default is the daemonized invocation. 145.It Fl u Ar user 146Login name of the user to execute the program under. 147Requires adequate superuser privileges. 148.It Fl s Ar syslog_priority 149These priorities are accepted: emerg, alert, crit, err, warning, 150notice, info, and debug. 151The default is notice. 152.It Fl l Ar syslog_facility 153These facilities are accepted: auth, authpriv, console, cron, daemon, 154ftp, kern, lpr, mail, news, ntp, security, syslog, user, uucp, and 155local0, ..., local7. 156The default is daemon. 157.It Fl T Ar syslog_tag 158Set the tag which is appended to all syslog messages. 159The default is daemon. 160.El 161.Pp 162If any of the options 163.Fl p , 164.Fl P , 165.Fl r , 166.Fl o , 167.Fl s , 168.Fl T , 169.Fl m , 170.Fl S , 171or 172.Fl l 173are specified, the program is executed in a spawned child process. 174The 175.Nm 176waits until it terminates to keep the pid file(s) locked and removes them 177after the process exits or restarts the program. 178In this case if the monitoring 179.Nm 180receives software termination signal (SIGTERM) it forwards it to the 181spawned process. 182Normally it will cause the child to exit, remove the pidfile(s) 183and then terminate. 184.Pp 185If neither file or syslog output are selected, all output is redirected to the 186.Nm 187process and written to stdout. 188The 189.Fl f 190option may be used to suppress the stdout output completely. 191.Pp 192The 193.Fl P 194option is useful combined with the 195.Fl r 196option as 197.Ar supervisor_pidfile 198contains the ID of the supervisor 199not the child. 200This is especially important if you use 201.Fl r 202in an rc script as the 203.Fl p 204option will give you the child's ID to signal when you attempt to 205stop the service, causing 206.Nm 207to restart the child. 208.Sh EXIT STATUS 209The 210.Nm 211utility exits 1 if an error is returned by the 212.Xr daemon 3 213library routine, 2 if 214.Ar child_pidfile 215or 216.Ar supervisor_pidfile 217is requested, but cannot be opened, 3 if process is already running (pidfile 218exists and is locked), 4 if 219.Ar syslog_priority 220is not accepted, 5 if 221.Ar syslog_facility 222is not accepted, 6 if 223.Ar output_mask 224is not within the accepted range, 7 if 225.Ar output_file 226cannot be opened for appending, and otherwise 0. 227.Sh DIAGNOSTICS 228If the command cannot be executed, an error message is printed to 229standard error. 230The exact behavior depends on the logging parameters and the 231.Fl f 232flag. 233.Sh SEE ALSO 234.Xr nohup 1 , 235.Xr setregid 2 , 236.Xr setreuid 2 , 237.Xr daemon 3 , 238.Xr exec 3 , 239.Xr pidfile 3 , 240.Xr termios 4 , 241.Xr tty 4 242.Sh HISTORY 243The 244.Nm 245utility first appeared in 246.Fx 4.7 . 247