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

FreeBSD Manual Pages

  
 
  

home | help
CYRUS.CONF(5)			   Cyrus IMAP			   CYRUS.CONF(5)

NAME
     cyrus.conf - Cyrus IMAP documentation

     Cyrus configuration file

DESCRIPTION
     cyrus.conf  is  the configuration file for the Cyrus master(8) process.  It
     defines the startup procedures, services, events and daemons to be spawned,
     managed and tended to by master.

     The /etc/cyrus.conf file consists of a series of entries divided into  sec-
     tions of the form

	    section {
		name arguments
		    ...
		    ...
		    ...
	    }

     where section is the name of the section, name is the name of the entry and
     arguments is the whitespace-separated list of arguments for the entry.  The
     name  may be any sequence of alphabetic and numeric characters, but may not
     contain punctuation such as '-' or '_'.  In  the  SERVICES  section,  names
     must be unique.

     Blank lines and lines beginning with ``#'' are ignored.

SECTION DESCRIPTIONS
     The  paragraphs  below  detail  the four sections (START, SERVICES, EVENTS,
     DAEMON) that can be placed in the /etc/cyrus.conf file.  The arguments that
     are available for each entry within the section are described, and each ar-
     gument's default value is shown.

     An important distinction exists between SERVICES and DAEMON  ;  the  former
     have  sockets  which  master(8)  will  listen on (either IP or Unix domain)
     while the latter do not.  Similarly, processes listed in START will be  run
     to  completion  before any SERVICES are started, while those in DAEMON will
     be managed by master(8).

     NOTE:
	If master(8) is started in debugging mode (-D) the  behavior  of  DAEMON
	will  be  altered,  as	master(8) will no longer be backgrounded.  Thus,
	processes started under DAEMON may not be terminated by master(8).

     Arguments can appear in any order. Some arguments have  no  default  value,
     these  are  listed  with ``<no default>''.  For string arguments, the value
     MUST be enclosed in double quotes.

   START
     This section lists the processes to run before any  SERVICES  are	spawned.
     This section is typically used to initialize databases.  Master itself will
     not  startup  until  all  tasks in START have completed, so put no blocking
     commands here.

	cmd=<no default>
	The command (with options) to spawn as a child process.  This string ar-
	gument is required.

     NOTE:
	Prior to v3, non-service daemons like idled were started from START  but
	would  background themselves, thus not blocking.  Post v3 these are bet-
	ter managed through the DAEMON section, under which master will  provide
	life-cycle management (i.e. restarting dead processes).

   SERVICES
     This  section  is	the  heart  of	the  /etc/cyrus.conf file.  It lists the
     processes that should be spawned to handle client connections made on  cer-
     tain Internet/UNIX sockets.

	babysit=0
	Integer  value	-  if  non-zero,  will make sure at least one process is
	pre-forked, and will set the maxforkrate to 10 if it's zero.

	cmd=<no default>
	The command (with options) to spawn as a child process.  This string ar-
	gument is required.

	listen=<no default>
	The UNIX or internet socket to listen on.  This string field is required
	and takes one of the following forms:

	    path
	    [ host : ] port

	where path is the explicit path to a UNIX socket,  host  is  either  the
	hostname or bracket-enclosed IP address of a network interface, and port
	is either a port number or service name (as listed in /etc/services).

	If  host is missing, 0.0.0.0 (all interfaces) is assumed.  Use localhost
	or 127.0.0.1 to restrict access, i.e. when a proxy on the same	host  is
	front-ending Cyrus.

	Note  that  on	most systems UNIX socket paths are limited to around 100
	characters.  See your system documentation for specifics.

	proto=tcp
	The protocol used for this service (tcp, tcp4, tcp6, udp,  udp4,  udp6).
	This string argument is optional.

	tcp4, udp4: These arguments are used to bind the service to IPv4 only.

	tcp6,  udp6:  These arguments are used to bind the service to IPv6 only,
	if the operating system supports this.

	tcp, udp: These arguments are used to bind to both IPv4 and IPv6 if pos-
	sible.

	prefork=0
	The number of instances of this service to always have running and wait-
	ing for a connection (for faster initial response time).   This  integer
	value  is  optional.  Note that if you are listening on multiple network
	types (i.e. ipv4 and ipv6) then one process will be forked for each  ad-
	dress, causing twice as many processes as you might expect.

	maxchild=-1
	The maximum number of instances of this service to spawn.  A value of -1
	means unlimited.  This integer value is optional.

	maxfds=256
	The  maximum  number of file descriptors to which to limit this process.
	This integer value is optional.

	maxforkrate=0
	Maximum number of processes to fork per second - the master will  insert
	sleeps to ensure it doesn't fork faster than this on average.

   EVENTS
     This section lists processes that should be run at specific intervals, sim-
     ilar  to  cron  jobs.   This section is typically used to perform scheduled
     cleanup/maintenance.

	cmd=<no default>
	The command (with options) to spawn as a child process.  This string ar-
	gument is required.

	period=0
	The interval (in minutes) at which to run  the	command.   This  integer
	value is optional, but SHOULD be a positive integer > 10.

	at=<hhmm>
	The  time (24-hour format) at which to run the command each day.  If set
	to a valid time (0000-2359), period is automatically set to  1440.  This
	string argument is optional.

   DAEMON
     This  section  lists  long running daemons to start before any SERVICES are
     spawned.  master(8)  will ensure that these processes are running, restart-
     ing any process which dies or forks. All listed processes will be	shutdown
     when master(8) is exiting.

	cmd=<no default>
	The command (with options) to spawn as a child process.  This string ar-
	gument is required.

	wait=0
	Switch: whether or not master(8) should wait for this daemon to success-
	fully start before continuing to load.

	If wait=n (the default), the daemon will be started asynchronously along
	with  the  service processes.  The daemon process will not have file de-
	scriptor 3 open, and does not need to indicate its readiness.

	If wait=y, the daemon MUST write "ok\r\n" to file descriptor 3 to  indi-
	cate  its readiness; if it does not do this, and master has been told to
	wait, master will continue to wait.... If it  writes  anything	else  to
	this  descriptor, or closes it before writing "ok\r\n", master will exit
	with an error.

	Daemons with wait=y will be started sequentially in the order  they  are
	listed	in  cyrus.conf,  waiting for each to report readiness before the
	next is started.

	Service processes, and wait=n daemons, are not started until  after  the
	wait=y daemons are all started and ready.

	At  shutdown,  wait=y daemons will be terminated sequentially in the re-
	verse order they were started, commencing after all other  services  and
	wait=n daemons have finished.

	If  a  daemon that was started with wait=y exits unexpectedly, such that
	master restarts it, master will restart it asynchronously, without wait-
	ing for it to report its readiness.  In this  case,  file  descriptor  3
	will not be open and the daemon should not try to write to it.

	If  master  is told to reread its config with a SIGHUP, this signal will
	be passed on to wait=y daemons like any other service.	 If  the  daemon
	exits  in response to the signal, master will restart it asynchronously,
	without waiting for it to report its readiness. In this case  too,  file
	descriptor  3 will not be open and the daemon should not try to write to
	it.

EXAMPLES
	# example cyrus.conf

	START {
	    recover	  cmd="ctl_cyrusdb -r"
	}

	SERVICES {
	    imap	  cmd="imapd" listen="imap" prefork=1
	    imaps	  cmd="imapd -s" listen="imaps" prefork=0
	    lmtpunix	  cmd="lmtpd" listen="/var/imap/socket/lmtp"
	    lmtp	  cmd="lmtpd" listen="localhost:lmtp"
	}

	EVENTS {
	    checkpoint	  cmd="ctl_cyrusdb -c" period=30
	    delprune	  cmd="cyr_expire -E 3" at=0400
	    tlsprune	  cmd="tls_prune" at=0400
	}

	DAEMON {
	    idled	  cmd="idled"
	}

ACCESS CONTROL
     When TCP Wrappers is used to control access to Cyrus services, the name  of
     the service entry should be used as the process name in the hosts_access(5)
     table.  For instance, in the example above, "imap", "imaps", "lmtpunix" and
     "lmtp"  would  be	used  as the process names.  This allows a single daemon
     such as imapd to be run in different modes or configurations (i.e., SSL and
     non-SSL enabled) yet still have separate access control rules.

SEE ALSO
     master(8), imapd(8), pop3d(8), lmtpd(8), smmapd(8), timsieved(8), idled(8),
     notifyd(8), ctl_cyrusdb(8), ctl_deliver(8), tls_prune(8), hosts_access(5)

AUTHOR
     The Cyrus Team, Nic Bernstein (Onlight)

COPYRIGHT
     1993a2025, The Cyrus Team

3.8.6				  Jun 27, 2025			   CYRUS.CONF(5)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=cyrus.conf&sektion=5&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help