chiark / gitweb /
man: various man page updates
authorLennart Poettering <lennart@poettering.net>
Sat, 3 Jul 2010 17:54:00 +0000 (19:54 +0200)
committerLennart Poettering <lennart@poettering.net>
Sat, 3 Jul 2010 17:54:00 +0000 (19:54 +0200)
man/daemon.xml
man/systemd.path.xml
man/systemd.service.xml
man/systemd.socket.xml
man/systemd.special.xml.in
man/systemd.target.xml
man/systemd.timer.xml
man/systemd.unit.xml

index 1cddf38f74374e6bda3bc0f0d1fa359b6cfdd1fb..853b3bb814790d6b3a35ad4c449b78ad7ee3e87f 100644 (file)
@@ -21,7 +21,7 @@
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 -->
 
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 -->
 
-<refentry id="systemd.special">
+<refentry id="daemon">
 
         <refentryinfo>
                 <title>daemon</title>
 
         <refentryinfo>
                 <title>daemon</title>
@@ -55,8 +55,9 @@
                 functionality to other processes. Traditionally,
                 daemons are implemented following a scheme originating
                 in SysV Unix. Modern daemons should follow a simpler
                 functionality to other processes. Traditionally,
                 daemons are implemented following a scheme originating
                 in SysV Unix. Modern daemons should follow a simpler
-                yet more powerful scheme here called "new-style"
-                daemons, as implemented by systemd. </para>
+                yet more powerful scheme (here called "new-style"
+                daemons), as implemented by
+                <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>. </para>
 
                 <refsect2>
                         <title>SysV Daemons</title>
 
                 <refsect2>
                         <title>SysV Daemons</title>
@@ -64,7 +65,7 @@
                         <para>When a traditional SysV daemon
                         starts, it should execute the following steps
                         as part of the initialization. Note that these
                         <para>When a traditional SysV daemon
                         starts, it should execute the following steps
                         as part of the initialization. Note that these
-                        steps are unnecessary for new-style daemons,
+                        steps are unnecessary for new-style daemons (see below),
                         and should only be implemented if compatibility
                         with SysV is essential.</para>
 
                         and should only be implemented if compatibility
                         with SysV is essential.</para>
 
@@ -80,7 +81,7 @@
                                 <filename>/proc/self/fd</filename>,
                                 with a fallback of iterating from file
                                 descriptor 3 to the value returned by
                                 <filename>/proc/self/fd</filename>,
                                 with a fallback of iterating from file
                                 descriptor 3 to the value returned by
-                                getrlimit() for
+                                <function>getrlimit()</function> for
                                 RLIMIT_NOFILE.</para></listitem>
 
                                 <listitem><para>Reset all signal
                                 RLIMIT_NOFILE.</para></listitem>
 
                                 <listitem><para>Reset all signal
                                 SIG_DFL.</para></listitem>
 
                                 <listitem><para>Reset the signal mask
                                 SIG_DFL.</para></listitem>
 
                                 <listitem><para>Reset the signal mask
-                                using sigprocmask().</para></listitem>
+                                using
+                                <function>sigprocmask()</function>.</para></listitem>
 
 
-                                <listitem><para>Call fork(),
+                                <listitem><para>Sanitize the
+                                environment block, removing or
+                                resetting environment variables that
+                                might negatively impact daemon
+                                runtime.</para></listitem>
+
+                                <listitem><para>Call <function>fork()</function>,
                                 to create a background
                                 process.</para></listitem>
 
                                 <listitem><para>In the child, call
                                 to create a background
                                 process.</para></listitem>
 
                                 <listitem><para>In the child, call
-                                setsid() to detach from any terminal
-                                and create an independent
-                                session.</para></listitem>
+                                <function>setsid()</function> to
+                                detach from any terminal and create an
+                                independent session.</para></listitem>
 
                                 <listitem><para>In the child, call
 
                                 <listitem><para>In the child, call
-                                fork() again, to ensure the daemon can
-                                never re-aquire a terminal
-                                again.</para></listitem>
+                                <function>fork()</function> again, to
+                                ensure the daemon can never re-aquire
+                                a terminal again.</para></listitem>
 
 
-                                <listitem><para>Call exit() in the
+                                <listitem><para>Call <function>exit()</function> in the
                                 first child, so that only the second
                                 child (the actual daemon process)
                                 stays around. This ensures that the
                                 first child, so that only the second
                                 child (the actual daemon process)
                                 stays around. This ensures that the
 
                                 <listitem><para>In the daemon process,
                                 reset the umask to 0, so that the file
 
                                 <listitem><para>In the daemon process,
                                 reset the umask to 0, so that the file
-                                modes passed to open(), mkdir() and
+                                modes passed to <function>open()</function>, <function>mkdir()</function> and
                                 suchlike directly control the access
                                 mode of the created files and
                                 directories.</para></listitem>
                                 suchlike directly control the access
                                 mode of the created files and
                                 directories.</para></listitem>
                                 blocks mount points from being
                                 unmounted.</para></listitem>
 
                                 blocks mount points from being
                                 unmounted.</para></listitem>
 
+                                <listitem><para>In the daemon process,
+                                write the daemon PID (as returned by
+                                <function>getpid()</function>) to a
+                                PID file, for example
+                                <filename>/var/run/foobar.pid</filename>
+                                (for a hypothetical daemon "foobar"),
+                                to ensure that the daemon cannot be
+                                started more than once. This must be
+                                implemented in race-free fashion so
+                                that the PID file is only updated when
+                                at the same time it is verified that
+                                the PID previously stored in the PID
+                                file no longer exists or belongs to a
+                                foreign process. Commonly some kind of
+                                file locking is employed to implement
+                                this logic.</para></listitem>
+
                                 <listitem><para>In the daemon process,
                                 drop privileges, if possible and
                                 applicable.</para></listitem>
                                 <listitem><para>In the daemon process,
                                 drop privileges, if possible and
                                 applicable.</para></listitem>
                                 complete. This can be implemented via
                                 an unnamed pipe or similar
                                 communication channel that is created
                                 complete. This can be implemented via
                                 an unnamed pipe or similar
                                 communication channel that is created
-                                before the first fork() and available
-                                in both processes.</para></listitem>
+                                before the first
+                                <function>fork()</function> and hence
+                                available in both the original and the
+                                daemon process.</para></listitem>
 
 
-                                <listitem><para>Call exit() in the
+                                <listitem><para>Call
+                                <function>exit()</function> in the
                                 original process. The process that
                                 invoked the daemon must be able to
                                 original process. The process that
                                 invoked the daemon must be able to
-                                rely that this exit() happens after
-                                initialization is complete and all
-                                external communication channels
+                                rely that this
+                                <function>exit()</function> happens
+                                after initialization is complete and
+                                all external communication channels
                                 established and
                                 accessible.</para></listitem>
                         </orderedlist>
 
                                 established and
                                 accessible.</para></listitem>
                         </orderedlist>
 
-                        <para>The BSD daemon() function should not be
-                        used, as it does only a subset of these steps.</para>
+                        <para>The BSD <function>daemon()</function> function should not be
+                        used, as it implements only a subset of these steps.</para>
 
                         <para>A daemon that needs to provide
                         compatibility with SysV systems should
 
                         <para>A daemon that needs to provide
                         compatibility with SysV systems should
                         execute them when run as new-style
                         service.</para>
 
                         execute them when run as new-style
                         service.</para>
 
+                        <para>Note that new-style init systems
+                        guarantee execution of daemon processes in
+                        clean process contexts: it is guaranteed that
+                        the environment block is sanitized, that the
+                        signal handlers and mask is reset and that no
+                        left-over file descriptors are passed. Daemons
+                        will be executed in their own session, and
+                        STDIN/STDOUT/STDERR connected to
+                        <filename>/dev/null</filename> unless
+                        otherwise configured. The umask is reset.</para>
+
                         <para>It is recommended for new-style daemons
                         to implement the following:</para>
 
                         <para>It is recommended for new-style daemons
                         to implement the following:</para>
 
                                 this is used by the init system to
                                 detect service errors and problems. It
                                 is recommended to follow the exit code
                                 this is used by the init system to
                                 detect service errors and problems. It
                                 is recommended to follow the exit code
-                                scheme as defined in LSB
-                                recommendations for SysV init scripts
-                                (http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html).</para></listitem>
+                                scheme as defined in the <ulink
+                                url="http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html">LSB
+                                recommendations for SysV init
+                                scripts</ulink>.</para></listitem>
 
                                 <listitem><para>As much as possible,
                                 rely on systemd's functionality to
 
                                 <listitem><para>As much as possible,
                                 rely on systemd's functionality to
                                 implementing your own, rely on
                                 systemd's privilege dropping code
                                 instead of implementing it in the
                                 implementing your own, rely on
                                 systemd's privilege dropping code
                                 instead of implementing it in the
-                                daemon, and similar.</para></listitem>
+                                daemon, and similar. See
+                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                                for the available
+                                controls.</para></listitem>
 
                                 <listitem><para>If possible and
                                 applicable expose the daemon's control
 
                                 <listitem><para>If possible and
                                 applicable expose the daemon's control
                                 boot-up speed; your daemon can be
                                 restarted on failure, without losing
                                 any bus requests, as the bus queues
                                 boot-up speed; your daemon can be
                                 restarted on failure, without losing
                                 any bus requests, as the bus queues
-                                requests for activatable
-                                services.</para></listitem>
+                                requests for activatable services. See
+                                below for details.</para></listitem>
 
                                 <listitem><para>If your daemon
                                 provides services to other local
 
                                 <listitem><para>If your daemon
                                 provides services to other local
                                 protocols (such as syslog, DNS) a
                                 daemon implementing socket-based
                                 activation can be restarted without
                                 protocols (such as syslog, DNS) a
                                 daemon implementing socket-based
                                 activation can be restarted without
-                                losing a single
-                                request.</para></listitem>
+                                losing a single request. See below for
+                                details.</para></listitem>
 
                                 <listitem><para>If applicable a daemon
                                 should notify the init system about
 
                                 <listitem><para>If applicable a daemon
                                 should notify the init system about
-                                startup completion or status
-                                updates via the sd_notify()
+                                startup completion or status updates
+                                via the
+                                <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                                 interface.</para></listitem>
 
                                 <listitem><para>Instead of using the
                                 interface.</para></listitem>
 
                                 <listitem><para>Instead of using the
-                                syslog() call to log directly to the
+                                <function>syslog()</function> call to log directly to the
                                 system logger, a new-style daemon may
                                 choose to simply log to STDERR via
                                 system logger, a new-style daemon may
                                 choose to simply log to STDERR via
-                                fprintf(), which is then forwarded to
+                                <function>fprintf()</function>, which is then forwarded to
                                 syslog by the init system. If log
                                 priorities are necessary these can be
                                 encoded by prefixing individual log
                                 syslog by the init system. If log
                                 priorities are necessary these can be
                                 encoded by prefixing individual log
                                 (for log priority 4 "WARNING" in the
                                 syslog priority scheme), following a
                                 similar style as the Linux kernel's
                                 (for log priority 4 "WARNING" in the
                                 syslog priority scheme), following a
                                 similar style as the Linux kernel's
-                                printk() priority system. In fact, using
-                                this style of logging also enables the
-                                init system to optionally direct all
-                                application logging to the kernel log
-                                buffer (kmsg), as accessible via
-                                dmesg.</para></listitem>
+                                <function>printk()</function> priority system. In fact,
+                                using this style of logging also
+                                enables the init system to optionally
+                                direct all application logging to the
+                                kernel log buffer (kmsg), as
+                                accessible via
+                                <citerefentry><refentrytitle>dmesg</refentrytitle><manvolnum>1</manvolnum></citerefentry>. This
+                                kind of logging may be enabled by
+                                setting
+                                <varname>StandardError=syslog</varname>
+                                in the service unit file. For details
+                                see
+                                <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                                and
+                                <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
 
                         </orderedlist>
 
                         </orderedlist>
+
+                        <para>These recommendations are similar but
+                        not identical to the <ulink
+                        url="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/LaunchOnDemandDaemons.html#//apple_ref/doc/uid/TP40001762-104738">Apple
+                        MacOS X Daemon Requirements</ulink>.</para>
                 </refsect2>
 
                 <refsect2>
                 </refsect2>
 
                 <refsect2>
-                        <title>Bus Activation</title>
+                        <title>Socket-Based Activation</title>
                 </refsect2>
 
                 <refsect2>
                 </refsect2>
 
                 <refsect2>
-                        <title>Socket Activation</title>
+                        <title>Bus-Based Activation</title>
                 </refsect2>
 
                 <refsect2>
                 </refsect2>
 
                 <refsect2>
-                        <title>Writing Service Files</title>
+                        <title>Path-Based Activation</title>
+                </refsect2>
+
+                <refsect2>
+                        <title>Writing Systemd Unit Files</title>
+
+                        <para>When writing systemd unit files, it is
+                        recommended to consider the following
+                        suggestions:</para>
+
+                        <orderedlist>
+                                <listitem><para>If possible do not use
+                                the <varname>Type=forking</varname>
+                                setting in service files. But if you
+                                do, make sure to set the PID file path
+                                using <varname>PIDFile=</varname>. See
+                                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                                for details.</para></listitem>
+
+                                <listitem><para>If your daemon
+                                registers a D-Bus name on the bus,
+                                make sure to use
+                                <varname>Type=dbus</varname> if
+                                possible.</para></listitem>
+
+                                <listitem><para>Make sure to set a
+                                good human-readable description string
+                                with
+                                <varname>Description=</varname>.</para></listitem>
+
+                                <listitem><para>Do not disable
+                                <varname>DefaultDependencies=</varname>,
+                                unless you really know what you do and
+                                your unit is involved in early boot or
+                                late system shutdown.</para></listitem>
+
+                                <listitem><para>Normally, little if
+                                any dependencies should need to
+                                be defined explicitly. However, if you
+                                do configure explicit dependencies, only refer to
+                                unit names listed on
+                                <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                                or names introduced by your own
+                                package to keep the unit file
+                                operating
+                                system-independent.</para></listitem>
+
+                                <listitem><para>Make sure to include
+                                an <literal>[Install]</literal> section including
+                                installation information for the unit
+                                file. See
+                                <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                                for details. To activate your service
+                                on boot make sure to add a
+                                <varname>WantedBy=multi-user.target</varname>
+                                or
+                                <varname>WantedBy=graphical.target</varname> directive.</para></listitem>
+
+                        </orderedlist>
                 </refsect2>
 
                 <refsect2>
                         <title>Installing Service Files</title>
                 </refsect2>
 
                 <refsect2>
                         <title>Installing Service Files</title>
+
+                        <para>At the build installation time
+                        (e.g. <command>make install</command> during
+                        package build) packages are recommended to
+                        install their systemd unit files in the
+                        directory returned by <command>pkg-config
+                        systemd
+                        --variable=systemdsystemnunitdir</command>
+                        (for system services),
+                        resp. <command>pkg-config systemd
+                        --variable=systemdsessionunitdir</command>
+                        (for session services). This will make the
+                        services available in the system on explicit
+                        request but not activate them automatically
+                        during boot. Optionally, during package
+                        installation (e.g. <command>rpm -i</command>
+                        by the administrator) symlinks should be
+                        created in the systemd configuration
+                        directories via the
+                        <citerefentry><refentrytitle>systemd-install</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                        tool, to activate them automatically on
+                        boot.</para>
+
+                        <para>Packages using
+                        <citerefentry><refentrytitle>autoconf</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                        are recommended to use a configure script
+                        excerpt like the following to determine the
+                        unit installation path during source
+                        configuration:</para>
+
+                        <programlisting>PKG_PROG_PKG_CONFIG
+AC_ARG_WITH([systemdsystemunitdir],
+        AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+        [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir"])</programlisting>
+
+                        <para>This snippet allows automatic
+                        installation of the unit files on systemd
+                        machines, and optionally allows their
+                        installation even on machines lacking
+                        systemd. (Modification of this snippet for the
+                        session unit directory is left as excercise to the
+                        reader.)</para>
+
+                        <para>Additionally, to ensure that
+                        <command>make distcheck</command> continues to
+                        work, it is recommended to add the following
+                        to the top-level <filename>Makefile.am</filename>
+                        file in
+                        <citerefentry><refentrytitle>automake</refentrytitle><manvolnum>1</manvolnum></citerefentry>-based
+                        projects:</para>
+
+                        <programlisting>DISTCHECK_CONFIGURE_FLAGS = \
+        --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)</programlisting>
+
+                        <para>Finally, unit files should be installed in the system with an automake excerpt like the following:</para>
+
+                        <programlisting>if HAVE_SYSTEMD
+systemdsystemunit_DATA = \
+        foobar.socket \
+        foobar.service
+endif</programlisting>
+
+                        <para>In the
+                        <citerefentry><refentrytitle>rpm</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+                        <filename>.spec</filename> file use a snippet like
+                        the following to enable/disable the service
+                        during installation/deinstallation. Consult
+                        the packaging guidelines of your distribution
+                        for details and the equivalent for other
+                        packaging managers:</para>
+
+                        <programlisting>%post
+/usr/bin/systemd-install enable foobar.service foobar.socket >/dev/null 2>&amp;1 || :
+
+%preun
+if [ "$1" -eq 0 ]; then
+        /usr/bin/systemd-install disable foobar.service foobar.socket >/dev/null 2>&amp;1 || :
+fi</programlisting>
+
+                </refsect2>
+
+                <refsect2>
+                        <title>Porting Existing Daemons</title>
+
+                        <para>Since new-style init systems such as
+                        systemd are compatible with traditional SysV
+                        init systems it is not strictly necessary to
+                        port existing daemons to the new
+                        style. However doing this offers additional
+                        functionality to the daemons as well as it
+                        simplifies integration into new-style init
+                        systems.</para>
+
+                        <para>To port an existing SysV compatible
+                        daemon the following steps are
+                        recommended:</para>
+
+                        <orderedlist>
+                                <listitem><para>If not already
+                                implemented, add an optional command
+                                line switch to the daemon to disable
+                                daemonization. This is useful not only
+                                for using the daemon in new-style init
+                                systems, but also to ease debugging.</para></listitem>
+
+                                <listitem><para>If the daemon offers
+                                interfaces to other software running
+                                on the local system via local AF_UNIX
+                                sockets, consider implementing
+                                socket-based activation (see
+                                above). Usually a minimal patch is
+                                sufficient to implement this: Extend
+                                the socket creation in the daemon code
+                                so that
+                                <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                                is checked for already passed sockets
+                                first. If sockets are passed
+                                (i.e. when
+                                <function>sd_listen_fds()</function>
+                                returns a positive value), skip the
+                                socket createn step and use the passed
+                                sockets. Secondly, ensure that the
+                                file-system socket nodes for local
+                                AF_UNIX sockets used in the
+                                socket-based activation are not
+                                removed when the daemon shuts down, if
+                                sockets have been passed. Third, if
+                                the daemon normally closes all
+                                remaining open file descriptors as
+                                part of its initialization, the
+                                sockets passed from the init system
+                                must be spared. Since new-style init
+                                systems guarantee that no left-over
+                                file descriptors are passed to
+                                executed processes, it might be a good
+                                choice to simply skip the closing of
+                                all remaining open file descriptors if
+                                file descriptors are
+                                passed.</para></listitem>
+
+                                <listitem><para>Write and install a
+                                systemd unit file for the service (and
+                                the sockets if socket-based activation
+                                is used, as well as a path unit file,
+                                if the daemon processes a spool
+                                directory), see above for
+                                details.</para></listitem>
+
+                                <listitem><para>If the daemon exposes
+                                interfaces via D-Bus, write and
+                                install a D-Bus activation file for
+                                the service, see above for
+                                details.</para></listitem>
+                        </orderedlist>
+
                 </refsect2>
 
         </refsect1>
                 </refsect2>
 
         </refsect1>
                 <title>See Also</title>
                 <para>
                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
                 <title>See Also</title>
                 <para>
                         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
-                        <citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-                        <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                        <citerefentry><refentrytitle>systemd-install</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                 </para>
         </refsect1>
 
                 </para>
         </refsect1>
 
index 772190096d415ad76d4c8be050ad1773b3154fd5..d910d2c5c83cbf3124d410b1cd5c8c6d83aca618 100644 (file)
                 <para>If an path unit is beneath another mount
                 point in the file system hierarchy, a dependency
                 between both units is created automatically.</para>
                 <para>If an path unit is beneath another mount
                 point in the file system hierarchy, a dependency
                 between both units is created automatically.</para>
+
+                <para>Unless <varname>DefaultDependencies=</varname>
+                is set to <option>false</option>, path units will
+                implicitly have dependencies of type
+                <varname>Conflicts=</varname> and
+                <varname>Before=</varname> on
+                <filename>shutdown.target</filename>. These ensure
+                that path units are terminated cleanly prior to system
+                shutdown. Only path units involved with early boot or
+                late system shutdown should disable this
+                option.</para>
         </refsect1>
 
         <refsect1>
         </refsect1>
 
         <refsect1>
index b01641f1e4fa74ae300d8e4d4420f3859ed5d4a0..91d6d094099ab99f0c37d365fc79e8c0888cd7c7 100644 (file)
                 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                 for the common options of all unit configuration
                 files. The common configuration items are configured
                 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
                 for the common options of all unit configuration
                 files. The common configuration items are configured
-                in the generic [Unit] and [Install] sections. The
-                service specific configuration options are configured
-                in the [Service] section.</para>
+                in the generic <literal>[Unit]</literal> and
+                <literal>[Install]</literal> sections. The service
+                specific configuration options are configured in the
+                <literal>[Service]</literal> section.</para>
 
                 <para>Additional options are listed in
                 <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                 which define the execution environment the commands
                 are executed in.</para>
 
                 <para>Additional options are listed in
                 <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                 which define the execution environment the commands
                 are executed in.</para>
+
+                <para>Unless <varname>DefaultDependencies=</varname>
+                is set to <option>false</option>, service units will
+                implicitly have dependencies of type
+                <varname>Requires=</varname> and
+                <varname>After=</varname> on
+                <filename>basic.target</filename> as well as
+                dependencies of type <varname>Conflicts=</varname> and
+                <varname>Before=</varname> on
+                <filename>shutdown.target</filename>. These ensure
+                that normal service units pull in basic system
+                initialization, and are terminated cleanly prior to
+                system shutdown. Only services involved with early
+                boot or late system shutdown should disable this
+                option.</para>
         </refsect1>
 
         <refsect1>
                 <title>Options</title>
 
         </refsect1>
 
         <refsect1>
                 <title>Options</title>
 
-                <para>Service files must include a [Service] section,
-                which carries information about the service and the
-                process it supervises. A number of options that may be
-                used in this section are shared with other unit
-                types. These options are documented in
+                <para>Service files must include a
+                <literal>[Service]</literal> section, which carries
+                information about the service and the process it
+                supervises. A number of options that may be used in
+                this section are shared with other unit types. These
+                options are documented in
                 <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>. The
                 <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>. The
-                options specific to the [Service] section of service
-                units are the following:</para>
+                options specific to the <literal>[Service]</literal>
+                section of service units are the following:</para>
 
                 <variablelist>
                         <varlistentry>
 
                 <variablelist>
                         <varlistentry>
 
                                 <para>Behaviour of
                                 <option>dbus</option> is similar to
 
                                 <para>Behaviour of
                                 <option>dbus</option> is similar to
-                                <option>simple</option>, however it
-                                is expected that the daemon acquires a
+                                <option>simple</option>, however it is
+                                expected that the daemon acquires a
                                 name on the D-Bus bus, as configured
                                 by
                                 <varname>BusName=</varname>. systemd
                                 will proceed starting follow-up units
                                 after the D-Bus bus name has been
                                 name on the D-Bus bus, as configured
                                 by
                                 <varname>BusName=</varname>. systemd
                                 will proceed starting follow-up units
                                 after the D-Bus bus name has been
-                                acquired.</para>
+                                acquired. Service units with this
+                                option configured implicitly have
+                                dependencies on the
+                                <filename>dbus.target</filename>
+                                unit.</para>
 
                                 <para>Behaviour of
                                 <option>notify</option> is similar to
 
                                 <para>Behaviour of
                                 <option>notify</option> is similar to
                                 starting follow-up units after this
                                 notification message has been sent. If
                                 this option is used
                                 starting follow-up units after this
                                 notification message has been sent. If
                                 this option is used
-                                <option>NotifyAccess=</option> (see
+                                <varname>NotifyAccess=</varname> (see
                                 below) must be set to open access to
                                 the notification socket provided by
                                 below) must be set to open access to
                                 the notification socket provided by
-                                systemd.</para>
+                                systemd. If
+                                <varname>NotifyAccess=</varname> is not
+                                set, it will be implicitly set to
+                                <option>main</option>.</para>
                                 </listitem>
                         </varlistentry>
 
                                 </listitem>
                         </varlistentry>
 
                                 services. This option may not be
                                 specified more than once. Optionally,
                                 if the absolute file name is prefixed
                                 services. This option may not be
                                 specified more than once. Optionally,
                                 if the absolute file name is prefixed
-                                with @, the second token will be
-                                passed as argv[0] to the executed
-                                process, followed by the further
-                                arguments specified. Unless
-                                <option>Type=forking</option> is set,
+                                with <literal>@</literal>, the second
+                                token will be passed as
+                                <literal>argv[0]</literal> to the
+                                executed process, followed by the
+                                further arguments specified. Unless
+                                <varname>Type=forking</varname> is set,
                                 the process started via this command
                                 line will be considered the main
                                 process of the
                                 the process started via this command
                                 line will be considered the main
                                 process of the
                                 forcibly via SIGTERM, and after
                                 another delay of this time with
                                 SIGKILL. (See
                                 forcibly via SIGTERM, and after
                                 another delay of this time with
                                 SIGKILL. (See
-                                <option>KillMode=</option>
+                                <varname>KillMode=</varname>
                                 below.) Takes a unit-less value in seconds, or a
                                 time span value such as "5min
                                 20s". Pass 0 to disable the timeout
                                 below.) Takes a unit-less value in seconds, or a
                                 time span value such as "5min
                                 20s". Pass 0 to disable the timeout
                                 <para>Processes will first be
                                 terminated via SIGTERM. If then after
                                 a delay (configured via the
                                 <para>Processes will first be
                                 terminated via SIGTERM. If then after
                                 a delay (configured via the
-                                <option>TimeoutSec=</option> option)
+                                <varname>TimeoutSec=</varname> option)
                                 processes still remain, the
                                 termination request is repeated with
                                 the SIGKILL signal. See
                                 processes still remain, the
                                 termination request is repeated with
                                 the SIGKILL signal. See
index 986ef8c0189016275e4d6b12c0c2a02f8cedf88f..6154b304e8af7d64c2b8283d08e4a619d0442f2a 100644 (file)
                 which services are instantiated for each incoming
                 connection.</para>
 
                 which services are instantiated for each incoming
                 connection.</para>
 
+                <para>Unless <varname>DefaultDependencies=</varname>
+                is set to <option>false</option>, socket units will
+                implicitly have dependencies of type
+                <varname>Requires=</varname> and
+                <varname>After=</varname> on
+                <filename>sysinit.target</filename> as well as
+                dependencies of type <varname>Conflicts=</varname> and
+                <varname>Before=</varname> on
+                <filename>shutdown.target</filename>. These ensure
+                that socket units pull in basic system
+                initialization, and are terminated cleanly prior to
+                system shutdown. Only sockets involved with early
+                boot or late system shutdown should disable this
+                option.</para>
+
                 <para>Socket units may be used to implement on-demand
                 starting of services, as well as parallelized starting
                 of services.</para>
                 <para>Socket units may be used to implement on-demand
                 starting of services, as well as parallelized starting
                 of services.</para>
index 79c6db1a5b24a3adf6b83f30d6e9f2e14659d433..49dc3892c0c4bc67c8e4a41cf9b6d85f82b49477 100644 (file)
@@ -51,6 +51,7 @@
                 <para><filename>basic.target</filename>,
                 <filename>ctrl-alt-del.target</filename>,
                 <filename>@SPECIAL_DBUS_SERVICE@</filename>,
                 <para><filename>basic.target</filename>,
                 <filename>ctrl-alt-del.target</filename>,
                 <filename>@SPECIAL_DBUS_SERVICE@</filename>,
+                <filename>dbus.target</filename>,
                 <filename>default.target</filename>,
                 <filename>display-manager.service</filename>,
                 <filename>emergency.service</filename>,
                 <filename>default.target</filename>,
                 <filename>display-manager.service</filename>,
                 <filename>emergency.service</filename>,
@@ -78,8 +79,8 @@
                 <filename>sockets.target</filename>,
                 <filename>swap.target</filename>,
                 <filename>sysinit.target</filename>,
                 <filename>sockets.target</filename>,
                 <filename>swap.target</filename>,
                 <filename>sysinit.target</filename>,
-                <filename>syslog.target</filename>,
                 <filename>@SPECIAL_SYSLOG_SERVICE@</filename>,
                 <filename>@SPECIAL_SYSLOG_SERVICE@</filename>,
+                <filename>syslog.target</filename>,
                 <filename>systemd-initctl.service</filename>,
                 <filename>systemd-initctl.socket</filename>,
                 <filename>systemd-logger.service</filename>,
                 <filename>systemd-initctl.service</filename>,
                 <filename>systemd-initctl.socket</filename>,
                 <filename>systemd-logger.service</filename>,
                                         up systemd will connect to it
                                         and register its
                                         service.</para>
                                         up systemd will connect to it
                                         and register its
                                         service.</para>
+
+                                        <para>Units should generally
+                                        avoid depending on this unit
+                                        directly and instead refer to
+                                        the
+                                        <filename>dbus.target</filename>
+                                        unit instead, which pulls this
+                                        one in directly or indirectly
+                                        via socket-based activation.</para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
+                                <term><filename>dbus.target</filename></term>
+                                <listitem>
+                                        <para>Administrators should
+                                        ensure that this target pulls
+                                        in a service unit with the
+                                        name or alias of
+                                        <filename>@SPECIAL_DBUS_SERVICE@</filename>
+                                        (or a socket unit that
+                                        activates this
+                                        service).</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                         files.</para>
                                 </listitem>
                         </varlistentry>
                                         files.</para>
                                 </listitem>
                         </varlistentry>
-                        <varlistentry>
-                                <term><filename>syslog.target</filename></term>
-                                <listitem>
-                                        <para>systemd automatically
-                                        adds dependencies of type
-                                        After for this target unit to
-                                        all SysV init script service
-                                        units with an LSB header
-                                        referring to the
-                                        <literal>$syslog</literal>
-                                        facility.</para>
-
-                                        <para>Administrators should
-                                        ensure that this target pulls
-                                        in a service unit with the
-                                        name or alias of
-                                        <filename>@SPECIAL_SYSLOG_SERVICE@</filename>
-                                        (or a socket unit that
-                                        activates this
-                                        service).</para>
-                                </listitem>
-                        </varlistentry>
                         <varlistentry>
                                 <term><filename>sysinit.target</filename></term>
                                 <listitem>
                         <varlistentry>
                                 <term><filename>sysinit.target</filename></term>
                                 <listitem>
                                         and use it for logging if it
                                         has been configured for
                                         that.</para>
                                         and use it for logging if it
                                         has been configured for
                                         that.</para>
-                                        <para>Applications should
-                                        generally not depend on this
-                                        service, and depend on
+
+                                        <para>Units should generally
+                                        avoid depending on this unit
+                                        directly and instead refer to
+                                        the
                                         <filename>syslog.target</filename>
                                         <filename>syslog.target</filename>
-                                        instead.</para>
+                                        unit instead, which pulls this
+                                        one in directly or indirectly
+                                        via socket-based activation.</para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
+                                <term><filename>syslog.target</filename></term>
+                                <listitem>
+                                        <para>systemd automatically
+                                        adds dependencies of type
+                                        After for this target unit to
+                                        all SysV init script service
+                                        units with an LSB header
+                                        referring to the
+                                        <literal>$syslog</literal>
+                                        facility.</para>
+
+                                        <para>Administrators should
+                                        ensure that this target pulls
+                                        in a service unit with the
+                                        name or alias of
+                                        <filename>@SPECIAL_SYSLOG_SERVICE@</filename>
+                                        (or a socket unit that
+                                        activates this
+                                        service).</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
index 88a9e6eada63ff6b26558de64f7d685729032a9c..6f3bc182dc65636a14226ac1bcbd2cbfb792eb89 100644 (file)
                 dependencies between units. Among other things, target
                 units are a more flexible replacement for SysV
                 runlevels in the classic SysV init system. (And for
                 dependencies between units. Among other things, target
                 units are a more flexible replacement for SysV
                 runlevels in the classic SysV init system. (And for
-                compatibility reasons there exist special
+                compatibility reasons special
                 target units such as
                 target units such as
-                <filename>runlevel3.target</filename> which are used by
+                <filename>runlevel3.target</filename> exist which are used by
                 the SysV runlevel compatibility code in systemd. See
                 <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
                 for details).</para>
                 the SysV runlevel compatibility code in systemd. See
                 <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
                 for details).</para>
+
+                <para>Unless
+                <varname>DefaultDependencies=</varname> is set to
+                <option>false</option>, target units will
+                implicitly complement all configured dependencies of type
+                <varname>Wants=</varname>,
+                <varname>Requires=</varname>,
+                <varname>RequiresOverridable=</varname> with
+                dependencies of type <varname>After=</varname>.
+                </para>
         </refsect1>
 
         <refsect1>
         </refsect1>
 
         <refsect1>
index 7a4cd348877cf7e00bb778bf551a58ca7c459b80..ef89693f14632c30b7d505c0adc5bbb5bf94f642 100644 (file)
                 matching service <filename>foo.service</filename>. The
                 unit to activate may be controlled by
                 <varname>Unit=</varname> (see below).</para>
                 matching service <filename>foo.service</filename>. The
                 unit to activate may be controlled by
                 <varname>Unit=</varname> (see below).</para>
+
+                <para>Unless <varname>DefaultDependencies=</varname>
+                is set to <option>false</option>, timer units will
+                implicitly have dependencies of type
+                <varname>Conflicts=</varname> and
+                <varname>Before=</varname> on
+                <filename>shutdown.target</filename>. These ensure
+                that timer units are stopped cleanly prior to system
+                shutdown. Only timer units involved with early boot or
+                late system shutdown should disable this
+                option.</para>
         </refsect1>
 
         <refsect1>
         </refsect1>
 
         <refsect1>
index 9c4269f3d2626ab1fbc5ead97a4e8f5378329768..26272c441026f5256045cc098cd55e9a93de0d2b 100644 (file)
                         <varlistentry>
                                 <term><varname>Description=</varname></term>
                                 <listitem><para>A free-form string
                         <varlistentry>
                                 <term><varname>Description=</varname></term>
                                 <listitem><para>A free-form string
-                                describing the unit. This is intended for use
-                                in UIs wanting to show
-                                descriptive information along with the
-                                unit name.</para></listitem>
+                                describing the unit. This is intended
+                                for use in UIs to show descriptive
+                                information along with the unit
+                                name.</para></listitem>
                         </varlistentry>
 
                         <varlistentry>
                         </varlistentry>
 
                         <varlistentry>
                                 <option>false</option>.</para></listitem>
                         </varlistentry>
 
                                 <option>false</option>.</para></listitem>
                         </varlistentry>
 
+                        <varlistentry>
+                                <term><varname>DefaultDependencies=</varname></term>
+
+                                <listitem><para>Takes a boolean
+                                argument. If <option>true</option>
+                                (the default), a few default
+                                dependencies will implicitly be
+                                created for the unit. The actual
+                                dependencies created depend on the
+                                unit type. For example, for service
+                                units, these dependencies ensure that
+                                the service is started only after
+                                basic system initialization is
+                                complete and is properly terminated on
+                                system shutdown. See the respective
+                                man pages for details. Generally, only
+                                services involved with early boot or
+                                late shutdown should set this option
+                                to <option>false</option>. It is
+                                highly recommended to leave this
+                                option enabled for the majority of
+                                common units. If set to
+                                <option>false</option> this option
+                                does not disable all implicit
+                                dependencies, just non-essential
+                                ones.</para></listitem>
+                        </varlistentry>
+
                 </variablelist>
 
                 <para>Unit file may include a [Install] section, which
                 </variablelist>
 
                 <para>Unit file may include a [Install] section, which