Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
daemonize(1)			 User Manuals			  daemonize(1)

NAME
       daemonize - run a program as a Unix daemon

SYNOPSIS
       daemonize  [-a] [-c directory] [-e stderr] [-o stdout] [-p pidfile] [-l
       lockfile] [-u user] [-v]	path [arg] ...

DESCRIPTION
       daemonize runs a	command	as a Unix daemon.  As defined  in  W.  Richard
       Stevens'	 1990 book, Unix Network Programming (Addison-Wesley, 1990), a
       daemon is "a process that executes `in the background'  (i.e.,  without
       an associated terminal or login shell) either waiting for some event to
       occur,  or waiting to perform some specified task on a periodic basis."
       Upon startup, a typical daemon program will:

       o Close all open	file descriptors (especially standard input,  standard
	 output	and standard error)

       o Change	 its  working directory	to the root filesystem,	to ensure that
	 it doesn't tie	up another filesystem and prevent it  from  being  un-
	 mounted

       o Reset its umask value

       o Run in	the background (i.e., fork)

       o Disassociate  from  its  process group	(usually a shell), to insulate
	 itself	from signals (such as HUP) sent	to the process group

       o Ignore	all terminal I/O signals

       o Disassociate from the control terminal	(and take steps	not  to	 reac-
	 quire one)

       o Handle	any SIGCLD signals

       Most  programs  that are	designed to be run as daemons do that work for
       themselves. However, you'll occasionally	run across one that does  not.
       When  you  must run a daemon program that does not properly make	itself
       into a true Unix	daemon,	you can	use daemonize to force it to run as  a
       true daemon.

OPTIONS
       -a     Append  to the output files, rather than overwriting them	(which
	      is the default). Only applicable if -e and/or -o are specified.

       -c directory
	      Specifies	the directory to which to change  before  running  the
	      program.	 Defaults to "/". The choice for this option is	impor-
	      tant. The	file system containing the daemon's working  directory
	      cannot be	unmounted while	the daemon is running. That's why most
	      daemons  are careful to use a working directory on the root file
	      system.

       -e stderr
	      Redirect standard	 error	to  the	 specified  file,  instead  of
	      "/dev/null".

	      Warning: Be careful where	you redirect the output! The file sys-
	      tem  containing the open file cannot be unmounted	as long	as the
	      file is open. For	best results, make sure	that this output  file
	      is  on  the  same	file system as the daemon's working directory.
	      (See the -c option.)

       -E name=value
	      Add an environment variable to the environment the  daemon  will
	      see. The parameter must be of the	form name=value.  This parame-
	      ter may be specified multiple times.

       -o stdout
	      Redirect	standard  output  to  the  specified  file, instead of
	      "/dev/null".

	      Warning: Be careful where	you redirect the output! The file sys-
	      tem containing the open file cannot be unmounted as long as  the
	      file  is open. For best results, make sure that this output file
	      is on the	same file system as the	 daemon's  working  directory.
	      (See the -c option.)

       -p pidfile
	      Causes  daemonize	 to  write the numeric process ID (PID)	of the
	      running daemon to	the specified file. This option	is useful when
	      the program being	daemonized doesn't create its own PID file.

       -l lockfile
	      Single-instance checking.	Causes daemonize  to  ensure  that  no
	      more  than  one  instance	of the daemon is running by placing an
	      exclusive	lock on	given lockfile.	If another process already has
	      a	lock on	the lockfile, daemonize	exits.

       It is possible  to  use	the  pidfile  as  the  lock  file  (e.g.,  "-p
       /var/run/foo  -l	 /var/run/foo"),  though  typical daemons use separate
       files.

       NOTE: If	the executed program decides to	close  all  file  descriptors,
       the single-instance locking will	not work, since	the lock depends on an
       open  file  descriptor.	(The  operating	system kernel removes the lock
       once the	process	holding	the lock closes	the file  or  exits.)	Normal
       processes  that	do  not	 daemonize themselves do not usually close all
       file descriptors.

       -u user
	      Run the program as the specified user. This option only works if
	      daemonize	is invoked by the superuser.  Note: For	 obvious  rea-
	      sons,  it's  very	dangerous to install daemonize as a setuid-to-
	      root executable. For that	reason,	daemonize will refuse  to  run
	      if it detects that it has	been installed that way.

       -v     Cause  daemonize	to  write  verbose messages to standard	error,
	      telling what it's	doing as it daemonizes the program.

NOTES
       If the host operating system provides the  daemon(3)  library  routine,
       daemonize  will	use  it.  Otherwise, daemonize uses its	own version of
       daemon(3).  This	choice is made at compile time.	(BSD 4.4-derived oper-
       ating systems tend to provide their own daemon(3) routine.)

       FreeBSD 5.0 introduced a	daemon(1) command that is similar to, but less
       functional, than	daemonize.

LICENSE
       This program released under a BSD-style license.	For more details, con-
       sult the	LICENSE	file accompanying the source  distribution,  or	 visit
       "http://software.clapper.org/daemonize/LICENSE".

SEE ALSO
       daemon(3), setsid(2), flock(2)

       daemonize Home Page: http://software.clapper.org/daemonize/

AUTHOR
       Brian M.	Clapper, bmc <at> clapper <dot>	org

CONTRIBUTORS
       Support	for the	-e and -o options is based on a	patch submitted	by Tim
       Starling	(tstarling <at>	wikimedia <dot>	org).

       Support for the -l option is based on a patch submitted by Yakov	Lerner
       (iler.ml	<at> gmail <dot> com).

Unix				  August 2006			  daemonize(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=daemonize&sektion=1&manpath=FreeBSD+Ports+14.3.quarterly>

home | help