xref: /freebsd/usr.sbin/daemon/daemon.8 (revision 2f02600abfddfc4e9f20dd384a2e729b451e16bd)
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 13, 2013
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 cfr
38.Op Fl p Ar child_pidfile
39.Op Fl P Ar supervisor_pidfile
40.Op Fl u Ar user
41.Ar command arguments ...
42.Sh DESCRIPTION
43The
44.Nm
45utility detaches itself from the controlling terminal and
46executes the program specified by its arguments.
47Privileges may be lowered to the specified user.
48.Pp
49The options are as follows:
50.Bl -tag -width indent
51.It Fl c
52Change the current working directory to the root
53.Pq Dq Pa / .
54.It Fl f
55Redirect standard input, standard output and standard error to
56.Pa /dev/null .
57.It Fl p Ar child_pidfile
58Write the ID of the created process into the
59.Ar child_pidfile
60using the
61.Xr pidfile 3
62functionality.
63The program is executed in a spawned child process while the
64.Nm
65waits until it terminates to keep the
66.Ar child_pidfile
67locked and removes it after the process exits.
68The
69.Ar child_pidfile
70owner is the user who runs the
71.Nm
72regardless of whether the
73.Fl u
74option is used or not.
75.It Fl P Ar supervisor_pidfile
76Write the ID of the
77.Nm
78process into the
79.Ar supervisor_pidfile
80using the
81.Xr pidfile 3
82functionality.
83The program is executed in a spawned child process while the
84.Nm
85waits until it terminates to keep the
86.Ar supervisor_pidfile
87locked and removes it after the process exits.
88The
89.Ar supervisor_pidfile
90owner is the user who runs the
91.Nm
92regardless of whether the
93.Fl u
94option is used or not.
95.It Fl r
96Supervise and restart the program if it has been terminated.
97.It Fl u Ar user
98Login name of the user to execute the program under.
99Requires adequate superuser privileges.
100.El
101.Pp
102If the
103.Fl p ,
104.Fl P
105or
106.Fl r
107option is specified the program is executed in a spawned child process.
108The
109.Nm
110waits until it terminates to keep the pid file(s) locked and removes them
111after the process exits or restarts the program.
112In this case if the monitoring
113.Nm
114receives software termination signal (SIGTERM) it forwards it to the
115spawned process.
116Normally it will cause the child to exit, remove the pidfile(s)
117and then terminate.
118.Pp
119The
120.Fl P
121option is useful combined with the
122.Fl r
123option as
124.Ar supervisor_pidfile
125contains the ID of the supervisor
126not the child. This is especially important if you use
127.Fl r
128in an rc script as the
129.Fl p
130option will give you the child's ID to signal when you attempt to
131stop the service, causing
132.Nm
133to restart the child.
134.Sh EXIT STATUS
135The
136.Nm
137utility exits 1 if an error is returned by the
138.Xr daemon 3
139library routine, 2 if
140.Ar child_pidfile
141or
142.Ar supervisor_pidfile
143is requested, but cannot be opened, 3 if process is already running (pidfile
144exists and is locked),
145otherwise 0.
146.Sh DIAGNOSTICS
147If the command cannot be executed, an error message is displayed on
148standard error unless the
149.Fl f
150flag is specified.
151.Sh SEE ALSO
152.Xr setregid 2 ,
153.Xr setreuid 2 ,
154.Xr daemon 3 ,
155.Xr exec 3 ,
156.Xr pidfile 3 ,
157.Xr termios 4 ,
158.Xr tty 4
159.Sh HISTORY
160The
161.Nm
162utility first appeared in
163.Fx 4.7 .
164