chiark / gitweb /
man: mention --runtime where appropriate
[elogind.git] / man / systemd.unit.xml
index f72b947..d61426a 100644 (file)
@@ -1,6 +1,9 @@
 <?xml version='1.0'?> <!--*-nxml-*-->
 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
+<!ENTITY % entities SYSTEM "custom-entities.ent" >
+%entities;
+]>
 
 <!--
   This file is part of systemd.
   Copyright 2010 Lennart Poettering
 
   systemd is free software; you can redistribute it and/or modify it
-  under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
   (at your option) any later version.
 
   systemd is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  General Public License for more details.
+  Lesser General Public License for more details.
 
-  You should have received a copy of the GNU General Public License
+  You should have received a copy of the GNU Lesser General Public License
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 -->
 
 
         <refnamediv>
                 <refname>systemd.unit</refname>
-                <refpurpose>systemd unit configuration files</refpurpose>
+                <refpurpose>Unit configuration</refpurpose>
         </refnamediv>
 
         <refsynopsisdiv>
-                <para><filename>systemd.service</filename>,
-                <filename>systemd.socket</filename>,
-                <filename>systemd.device</filename>,
-                <filename>systemd.mount</filename>,
-                <filename>systemd.automount</filename>,
-                <filename>systemd.swap</filename>,
-                <filename>systemd.target</filename>,
-                <filename>systemd.path</filename>,
-                <filename>systemd.timer</filename>,
-                <filename>systemd.snapshot</filename></para>
+                <para><filename><replaceable>service</replaceable>.service</filename>,
+                <filename><replaceable>socket</replaceable>.socket</filename>,
+                <filename><replaceable>device</replaceable>.device</filename>,
+                <filename><replaceable>mount</replaceable>.mount</filename>,
+                <filename><replaceable>automount</replaceable>.automount</filename>,
+                <filename><replaceable>swap</replaceable>.swap</filename>,
+                <filename><replaceable>target</replaceable>.target</filename>,
+                <filename><replaceable>path</replaceable>.path</filename>,
+                <filename><replaceable>timer</replaceable>.timer</filename>,
+                <filename><replaceable>snapshot</replaceable>.snapshot</filename>,
+                <filename><replaceable>slice</replaceable>.slice</filename>,
+                <filename><replaceable>scope</replaceable>.scope</filename></para>
+
+                <para><literallayout><filename>/etc/systemd/system/*</filename>
+<filename>/run/systemd/system/*</filename>
+<filename>/usr/lib/systemd/system/*</filename>
+<filename>...</filename>
+                </literallayout></para>
+
+                <para><literallayout><filename>$HOME/.config/systemd/user/*</filename>
+<filename>/etc/systemd/user/*</filename>
+<filename>/run/systemd/user/*</filename>
+<filename>/usr/lib/systemd/user/*</filename>
+<filename>...</filename>
+                </literallayout></para>
         </refsynopsisdiv>
 
         <refsect1>
                 <para>A unit configuration file encodes information
                 about a service, a socket, a device, a mount point, an
                 automount point, a swap file or partition, a start-up
-                target, a file system path or a timer controlled and
-                supervised by
-                <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>. The
-                syntax is inspired by <ulink
+                target, a watched file system path, a timer controlled
+                and supervised by
+                <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+                a temporary system state snapshot, a resource
+                management slice or a group of externally created
+                processes. The syntax is inspired by <ulink
                 url="http://standards.freedesktop.org/desktop-entry-spec/latest/">XDG
-                Desktop Entry Specification</ulink> <filename>.desktop</filename> files, which are in turn
+                Desktop Entry Specification</ulink>
+                <filename>.desktop</filename> files, which are in turn
                 inspired by Microsoft Windows
                 <filename>.ini</filename> files.</para>
 
-                <para>This man pages lists the common configuration
+                <para>This man page lists the common configuration
                 options of all the unit types. These options need to
-                be configured in the [Unit] resp. [Install]
-                section of the unit files.</para>
+                be configured in the [Unit] or [Install]
+                sections of the unit files.</para>
 
                 <para>In addition to the generic [Unit] and [Install]
-                sections described here, each unit should have a
+                sections described here, each unit may have a
                 type-specific section, e.g. [Service] for a service
                 unit. See the respective man pages for more
-                information.</para>
+                information:
+                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                <citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+                <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+                <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+                </para>
+
+                <para>Unit files are loaded from a set of paths
+                determined during compilation, described in the next section.
+                </para>
 
                 <para>Unit files may contain additional options on top
                 of those listed here. If systemd encounters an unknown
-                option it will write a warning log message but
+                option, it will write a warning log message but
                 continue loading the unit. If an option is prefixed
-                with <option>X-</option> it is ignored completely by
+                with <option>X-</option>, it is ignored completely by
                 systemd. Applications may use this to include
                 additional information in the unit files.</para>
 
                 written in various formats. For positive settings the
                 strings <option>1</option>, <option>yes</option>,
                 <option>true</option> and <option>on</option> are
-                equivalent. For negative settings the strings
+                equivalent. For negative settings, the strings
                 <option>0</option>, <option>no</option>,
                 <option>false</option> and <option>off</option> are
                 equivalent.</para>
                 <para>Time span values encoded in unit files can be
                 written in various formats. A stand-alone number
                 specifies a time in seconds. If suffixed with a time
-                unit, the unit is honored. A concatenation of
-                multiple values with units is supported, in which case
-                the values are added up. Example: "50" refers to 50
+                unit, the unit is honored. A concatenation of multiple
+                values with units is supported, in which case the
+                values are added up. Example: "50" refers to 50
                 seconds; "2min 200ms" refers to 2 minutes plus 200
                 milliseconds, i.e. 120200ms. The following time units
-                are understood: s, min, h, d, w, ms, us.</para>
+                are understood: s, min, h, d, w, ms, us. For details
+                see
+                <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
 
                 <para>Empty lines and lines starting with # or ; are
                 ignored. This may be used for commenting. Lines ending
                 line while reading and the backslash is replaced by a
                 space character. This may be used to wrap long lines.</para>
 
-                <para>If a line starts with <option>.include</option>
-                followed by a file name, the specified file will be
-                read as if its contents were listed in place of the
-                <option>.include</option> directive.</para>
-
                 <para>Along with a unit file
-                <filename>foo.service</filename> a directory
+                <filename>foo.service</filename>, the directory
                 <filename>foo.service.wants/</filename> may exist. All
-                units symlinked from such a directory are implicitly
-                added as dependencies of type
+                unit files symlinked from such a directory are
+                implicitly added as dependencies of type
                 <varname>Wanted=</varname> to the unit. This is useful
                 to hook units into the start-up of other units,
-                without having to modify their unit configuration
-                files. For details about the semantics of
-                <varname>Wanted=</varname> see below. The preferred
-                way to create symlinks in the
-                <filename>.wants/</filename> directory of a service is
-                with the <command>enable</command> command of the
+                without having to modify their unit files. For details
+                about the semantics of <varname>Wanted=</varname>, see
+                below. The preferred way to create symlinks in the
+                <filename>.wants/</filename> directory of a unit file
+                is with the <command>enable</command> command of the
                 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                 tool which reads information from the [Install]
-                section of unit files. (See below.)</para>
+                section of unit files (see below). A similar
+                functionality exists for <varname>Requires=</varname>
+                type dependencies as well, the directory suffix is
+                <filename>.requires/</filename> in this case.</para>
+
+                <para>Along with a unit file
+                <filename>foo.service</filename>, a directory
+                <filename>foo.service.d/</filename> may exist. All
+                files with the suffix <literal>.conf</literal> from
+                this directory will be parsed after the file itself is
+                parsed. This is useful to alter or add configuration
+                settings to a unit, without having to modify their
+                unit files. Make sure that the file that is included
+                has the appropriate section headers before any
+                directive.</para>
+
+                <para>If a line starts with <option>.include</option>
+                followed by a filename, the specified file will be
+                parsed at this point. Make sure that the file that is
+                included has the appropriate section headers before
+                any directives.</para>
 
                 <para>Note that while systemd offers a flexible
                 dependency system between units it is recommended to
-                use this functionality only sparsely and instead rely
+                use this functionality only sparingly and instead rely
                 on techniques such as bus-based or socket-based
-                activation which makes dependencies implicit, which
-                both results in a simpler and more flexible
-                system.</para>
+                activation which make dependencies implicit, resulting
+                in a both simpler and more flexible system.</para>
 
                 <para>Some unit names reflect paths existing in the
-                file system name space. Example: a device unit
+                file system namespace. Example: a device unit
                 <filename>dev-sda.device</filename> refers to a device
-                with the device node <filename>/dev/sda</filename> in
-                the file system namespace. If this applies a special
+                with the device node <filename noindex='true'>/dev/sda</filename> in
+                the file system namespace. If this applies, a special
                 way to escape the path name is used, so that the
-                result is usable as part of a file name. Basically,
+                result is usable as part of a filename. Basically,
                 given a path, "/" is replaced by "-", and all
                 unprintable characters and the "-" are replaced by
                 C-style "\x20" escapes. The root directory "/" is
                 <para>Optionally, units may be instantiated from a
                 template file at runtime. This allows creation of
                 multiple units from a single configuration file. If
-                systemd looks for a unit configuration file it will
+                systemd looks for a unit configuration file, it will
                 first search for the literal unit name in the
                 filesystem. If that yields no success and the unit
-                name contains an @ character, systemd will look for a
+                name contains an <literal>@</literal> character, systemd will look for a
                 unit template that shares the same name but with the
-                instance string (i.e. the part between the @ character
+                instance string (i.e. the part between the <literal>@</literal> character
                 and the suffix) removed. Example: if a service
                 <filename>getty@tty3.service</filename> is requested
                 and no file by that name is found, systemd will look
                 for <filename>getty@.service</filename> and
                 instantiate a service from that configuration file if
-                it is found. To refer to the instance string from
+                it is found.</para>
+
+                <para>To refer to the instance string from
                 within the configuration file you may use the special
                 <literal>%i</literal> specifier in many of the
-                configuration options. Other specifiers that may be
-                used are <literal>%n</literal>, <literal>%N</literal>,
-                <literal>%p</literal>, <literal>%P</literal>,
-                <literal>%I</literal> and <literal>%f</literal>, for
-                the full unit name, the unescaped unit name, the
-                prefix name, the unescaped prefix name, the unescaped
-                instance name and the unescaped filename,
-                respectively. The unescaped filename is either the
-                unescaped instance name (if set) with / prepended (if
-                necessary), or the prefix name similarly prepended
-                with /. The prefix name here refers to the string
-                before the @, i.e. "getty" in the example above, where
-                "tty3" is the instance name.</para>
+                configuration options. See below for details.</para>
 
                 <para>If a unit file is empty (i.e. has the file size
-                0) or is symlinked to <filename>/dev/null</filename>
+                0) or is symlinked to <filename>/dev/null</filename>,
                 its configuration will not be loaded and it appears
                 with a load state of <literal>masked</literal>, and
                 cannot be activated. Use this as an effective way to
                 <ulink
                 url="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise">Interface
                 Stability Promise</ulink>.</para>
+
+        </refsect1>
+
+        <refsect1>
+                <title>Unit Load Path</title>
+
+                <para>Unit files are loaded from a set of paths
+                determined during compilation, described in the two
+                tables below. Unit files found in directories listed
+                earlier override files with the same name in
+                directories lower in the list.</para>
+
+                <para>When systemd is running in user mode
+                (<option>--user</option>) and the variable
+                <varname>$SYSTEMD_UNIT_PATH</varname> is set, this
+                contents of this variable overrides the unit load
+                path.
+                </para>
+
+                <table>
+                  <title>
+                    Load path when running in system mode (<option>--system</option>).
+                  </title>
+
+                  <tgroup cols='2'>
+                    <colspec colname='path' />
+                    <colspec colname='expl' />
+                    <thead>
+                      <row>
+                        <entry>Path</entry>
+                        <entry>Description</entry>
+                      </row>
+                    </thead>
+                    <tbody>
+                      <row>
+                        <entry><filename>/etc/systemd/system</filename></entry>
+                        <entry>Local configuration</entry>
+                      </row>
+                      <row>
+                        <entry><filename>/run/systemd/system</filename></entry>
+                        <entry>Runtime units</entry>
+                      </row>
+                      <row>
+                        <entry><filename>/usr/lib/systemd/system</filename></entry>
+                        <entry>Units of installed packages</entry>
+                      </row>
+                    </tbody>
+                  </tgroup>
+                </table>
+
+                <table>
+                  <title>
+                    Load path when running in user mode (<option>--user</option>).
+                  </title>
+
+                  <tgroup cols='2'>
+                    <colspec colname='path' />
+                    <colspec colname='expl' />
+                    <thead>
+                      <row>
+                        <entry>Path</entry>
+                        <entry>Description</entry>
+                      </row>
+                    </thead>
+                    <tbody>
+                      <row>
+                        <entry><filename>$HOME/.config/systemd/user</filename></entry>
+                        <entry>User configuration</entry>
+                      </row>
+                      <row>
+                        <entry><filename>/etc/systemd/user</filename></entry>
+                        <entry>Local configuration</entry>
+                      </row>
+                      <row>
+                        <entry><filename>/run/systemd/user</filename></entry>
+                        <entry>Runtime units</entry>
+                      </row>
+                      <row>
+                        <entry><filename>/usr/lib/systemd/user</filename></entry>
+                        <entry>Units of installed packages</entry>
+                      </row>
+                    </tbody>
+                  </tgroup>
+                </table>
+
+                <para>Additional units might be loaded into systemd
+                ("linked") from directories not on the unit load
+                path. See the <command>link</command> command for
+                <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>. Also,
+                some units are dynamically created via generators
+                <ulink
+                url="http://www.freedesktop.org/wiki/Software/systemd/Generators/">Generators</ulink>.
+                </para>
         </refsect1>
 
         <refsect1>
                 carries generic information about the unit that is not
                 dependent on the type of unit:</para>
 
-                <variablelist>
-                        <varlistentry>
-                                <term><varname>Names=</varname></term>
-
-                                <listitem><para>Additional names for
-                                this unit. The names listed here must
-                                have the same suffix (i.e. type) as
-                                the unit file name. This option may be
-                                specified more than once, in which
-                                case all listed names are used. Note
-                                that this option is different from the
-                                <varname>Alias=</varname> option from
-                                the [Install] section mentioned
-                                below. See below for details.</para>
-                                </listitem>
-                        </varlistentry>
+                <variablelist class='unit-directives'>
 
                         <varlistentry>
                                 <term><varname>Description=</varname></term>
                                 describing the unit. This is intended
                                 for use in UIs to show descriptive
                                 information along with the unit
-                                name.</para></listitem>
+                                name. The description should contain a name
+                                that means something to the end user.
+                                <literal>Apache2 Web Server</literal> is a good
+                                example. Bad examples are
+                                <literal>high-performance light-weight HTTP
+                                server</literal> (too generic) or
+                                <literal>Apache2</literal> (too specific and
+                                meaningless for people who do not know
+                                Apache).</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term><varname>Documentation=</varname></term>
+                                <listitem><para>A space-separated list
+                                of URIs referencing documentation for
+                                this unit or its
+                                configuration. Accepted are only URIs
+                                of the types
+                                <literal>http://</literal>,
+                                <literal>https://</literal>,
+                                <literal>file:</literal>,
+                                <literal>info:</literal>,
+                                <literal>man:</literal>. For more
+                                information about the syntax of these
+                                URIs, see
+                                <citerefentry><refentrytitle>uri</refentrytitle><manvolnum>7</manvolnum></citerefentry>. The
+                                URIs should be listed in order of
+                                relevance, starting with the most
+                                relevant. It is a good idea to first
+                                reference documentation that explains
+                                what the unit's purpose is, followed
+                                by how it is configured, followed by
+                                any other related documentation. This
+                                option may be specified more than once
+                                in which case the specified list of
+                                URIs is merged. If the empty string is
+                                assigned to this option, the list is
+                                reset and all prior assignments will
+                                have no effect.</para></listitem>
                         </varlistentry>
 
                         <varlistentry>
                                 <varname>Requires=</varname> in order
                                 to achieve a system that is more
                                 robust when dealing with failing
-                                services.</para></listitem>
-                        </varlistentry>
+                                services.</para>
 
+                                <para>Note that dependencies of this
+                                type may also be configured outside of
+                                the unit configuration file by
+                                adding a symlink to a
+                                <filename>.requires/</filename> directory
+                                accompanying the unit file. For
+                                details see above.</para></listitem>
+                        </varlistentry>
 
                         <varlistentry>
                                 <term><varname>RequiresOverridable=</varname></term>
                                 the start-up was pulled in indirectly
                                 by some dependency or automatic
                                 start-up of units that is not
-                                requested by the user this dependency
+                                requested by the user, this dependency
                                 must be fulfilled and otherwise the
                                 transaction fails. Hence, this option
                                 may be used to configure dependencies
 
                                 <listitem><para>Similar to
                                 <varname>Requires=</varname>
-                                resp. <varname>RequiresOverridable=</varname>. However,
+                                and <varname>RequiresOverridable=</varname>, respectively. However,
                                 if a unit listed here is not started
                                 already it will not be started and the
                                 transaction fails
                                 the transaction as a whole. This is
                                 the recommended way to hook start-up
                                 of one unit to the start-up of another
-                                unit. Note that dependencies of this
+                                unit.</para>
+
+                                <para>Note that dependencies of this
                                 type may also be configured outside of
                                 the unit configuration file by
                                 adding a symlink to a
                         </varlistentry>
 
                         <varlistentry>
+                                <term><varname>BindsTo=</varname></term>
+
+                                <listitem><para>Configures requirement
+                                dependencies, very similar in style to
+                                <varname>Requires=</varname>, however
+                                in addition to this behavior it also
+                                declares that this unit is stopped
+                                when any of the units listed suddenly
+                                disappears. Units can suddenly,
+                                unexpectedly disappear if a service
+                                terminates on its own choice, a device
+                                is unplugged or a mount point
+                                unmounted without involvement of
+                                systemd.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term><varname>PartOf=</varname></term>
+
+                                <listitem><para>Configures dependencies
+                                similar to <varname>Requires=</varname>,
+                                but limited to stopping and restarting
+                                of units. When systemd stops or restarts
+                                the units listed here, the action is
+                                propagated to this unit.
+                                Note that this is a one way dependency -
+                                changes to this unit do not affect the
+                                listed units.
+                                </para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
                                 <term><varname>Conflicts=</varname></term>
 
                                 <listitem><para>Configures negative
                                 type <varname>After=</varname> or
                                 <varname>Before=</varname>. If two
                                 units have no ordering dependencies
-                                between them they are shut down
-                                resp. started up simultaneously, and
+                                between them, they are shut down
+                                or started up simultaneously, and
                                 no ordering takes
                                 place. </para></listitem>
                         </varlistentry>
                                 <listitem><para>Lists one or more
                                 units that are activated when this
                                 unit enters the
-                                '<literal>failed</literal>'
+                                <literal>failed</literal>
                                 state.</para></listitem>
                         </varlistentry>
 
                         <varlistentry>
-                                <term><varname>RecursiveStop=</varname></term>
+                                <term><varname>PropagatesReloadTo=</varname></term>
+                                <term><varname>ReloadPropagatedFrom=</varname></term>
+
+                                <listitem><para>Lists one or more
+                                units where reload requests on the
+                                unit will be propagated to/on the
+                                other unit will be propagated
+                                from. Issuing a reload request on a
+                                unit will automatically also enqueue a
+                                reload request on all units that the
+                                reload request shall be propagated to
+                                via these two
+                                settings.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term><varname>RequiresMountsFor=</varname></term>
+
+                                <listitem><para>Takes a space-separated
+                                list of absolute paths. Automatically
+                                adds dependencies of type
+                                <varname>Requires=</varname> and
+                                <varname>After=</varname> for all
+                                mount units required to access the
+                                specified path.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term><varname>OnFailureIsolate=</varname></term>
 
                                 <listitem><para>Takes a boolean
-                                argument. If <option>true</option> and
-                                the unit stops without being requested
-                                by the user, all units
-                                depending on it will be stopped as
-                                well. (e.g. if a service exits or
-                                crashes on its own behalf, units using
-                                it will be stopped) Note that normally
-                                if a unit stops without a user request,
-                                units depending on it will not be
-                                terminated. Only if the user requested
-                                shutdown of a unit, all units depending
-                                on that unit will be shut down as well
-                                and at the same time. Defaults to
+                                argument. If <option>true</option>, the
+                                unit listed in
+                                <varname>OnFailure=</varname> will be
+                                enqueued in isolation mode, i.e. all
+                                units that are not its dependency will
+                                be stopped. If this is set, only a
+                                single unit may be listed in
+                                <varname>OnFailure=</varname>. Defaults
+                                to
                                 <option>false</option>.</para></listitem>
                         </varlistentry>
 
                         <varlistentry>
+                                <term><varname>IgnoreOnIsolate=</varname></term>
+
+                                <listitem><para>Takes a boolean
+                                argument. If <option>true</option>,
+                                this unit will not be stopped when
+                                isolating another unit. Defaults to
+                                <option>false</option>.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term><varname>IgnoreOnSnapshot=</varname></term>
+
+                                <listitem><para>Takes a boolean
+                                argument. If <option>true</option>,
+                                this unit will not be included in
+                                snapshots. Defaults to
+                                <option>true</option> for device and
+                                snapshot units, <option>false</option>
+                                for the others.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
                                 <term><varname>StopWhenUnneeded=</varname></term>
 
                                 <listitem><para>Takes a boolean
-                                argument. If <option>true</option>
+                                argument. If <option>true</option>,
                                 this unit will be stopped when it is
                                 no longer used. Note that in order to
                                 minimize the work to be executed,
                                 <term><varname>RefuseManualStop=</varname></term>
 
                                 <listitem><para>Takes a boolean
-                                argument. If <option>true</option>
+                                argument. If <option>true</option>,
                                 this unit can only be activated
-                                (resp. deactivated) indirectly. In
-                                this case explicit start-up
-                                (resp. termination) requested by the
+                                or deactivated indirectly. In
+                                this case, explicit start-up
+                                or termination requested by the
                                 user is denied, however if it is
-                                started (resp. stopped) as a
+                                started or stopped as a
                                 dependency of another unit, start-up
-                                (resp. termination) will succeed. This
+                                or termination will succeed. This
                                 is mostly a safety feature to ensure
                                 that the user does not accidentally
                                 activate units that are not intended
                                 <term><varname>AllowIsolate=</varname></term>
 
                                 <listitem><para>Takes a boolean
-                                argument. If <option>true</option>
+                                argument. If <option>true</option>,
                                 this unit may be used with the
                                 <command>systemctl isolate</command>
-                                command. Otherwise this will be
+                                command. Otherwise, this will be
                                 refused. It probably is a good idea to
                                 leave this disabled except for target
                                 units that shall be used similar to
                                 <term><varname>DefaultDependencies=</varname></term>
 
                                 <listitem><para>Takes a boolean
-                                argument. If <option>true</option>
+                                argument. If <option>true</option>,
                                 (the default), a few default
                                 dependencies will implicitly be
                                 created for the unit. The actual
                                 highly recommended to leave this
                                 option enabled for the majority of
                                 common units. If set to
-                                <option>false</option> this option
+                                <option>false</option>, this option
                                 does not disable all implicit
                                 dependencies, just non-essential
                                 ones.</para></listitem>
                         </varlistentry>
 
                         <varlistentry>
-                                <term><varname>IgnoreDependencyFailure=</varname></term>
-
-                                <listitem><para>Takes a boolean
-                                argument. If <option>true</option> and
-                                a requirement dependency of this unit
-                                fails to start up this unit will be
-                                started nonetheless, ignoring that
-                                failure. If <option>false</option>
-                                (the default) and a dependency unit
-                                fails the unit will immediately fail
-                                too and the job is removed.</para></listitem>
-                        </varlistentry>
-
-                        <varlistentry>
                                 <term><varname>JobTimeoutSec=</varname></term>
 
                                 <listitem><para>When clients are
                                 waiting for a job of this unit to
                                 complete, time out after the specified
-                                time. If this time limit is reached
+                                time. If this time limit is reached,
                                 the job will be cancelled, the unit
                                 however will not change state or even
-                                enter the '<literal>failed</literal>'
+                                enter the <literal>failed</literal>
                                 mode. This value defaults to 0 (job
                                 timeouts disabled), except for device
                                 units. NB: this timeout is independent
 
                         <varlistentry>
                                 <term><varname>ConditionPathExists=</varname></term>
+                                <term><varname>ConditionPathExistsGlob=</varname></term>
+                                <term><varname>ConditionPathIsDirectory=</varname></term>
+                                <term><varname>ConditionPathIsSymbolicLink=</varname></term>
+                                <term><varname>ConditionPathIsMountPoint=</varname></term>
+                                <term><varname>ConditionPathIsReadWrite=</varname></term>
+                                <term><varname>ConditionDirectoryNotEmpty=</varname></term>
+                                <term><varname>ConditionFileNotEmpty=</varname></term>
+                                <term><varname>ConditionFileIsExecutable=</varname></term>
                                 <term><varname>ConditionKernelCommandLine=</varname></term>
+                                <term><varname>ConditionVirtualization=</varname></term>
+                                <term><varname>ConditionSecurity=</varname></term>
+                                <term><varname>ConditionCapability=</varname></term>
+                                <term><varname>ConditionHost=</varname></term>
+                                <term><varname>ConditionACPower=</varname></term>
+                                <term><varname>ConditionNull=</varname></term>
 
                                 <listitem><para>Before starting a unit
                                 verify that the specified condition is
-                                true. With
+                                true. If it is not true, the starting
+                                of the unit will be skipped, however
+                                all ordering dependencies of it are
+                                still respected. A failing condition
+                                will not result in the unit being
+                                moved into a failure state. The
+                                condition is checked at the time the
+                                queued start job is to be
+                                executed.</para>
+
+                                <para>With
                                 <varname>ConditionPathExists=</varname>
-                                a file existance condition can be
+                                a file existence condition is
                                 checked before a unit is started. If
                                 the specified absolute path name does
-                                not exist startup of a unit will not
-                                actually happen, however the unit is
-                                still useful for ordering purposes in
-                                this case. The condition is checked at
-                                the time the queued start job is to be
-                                executed. If the absolute path name
-                                passed to
+                                not exist, the condition will
+                                fail. If the absolute path name passed
+                                to
                                 <varname>ConditionPathExists=</varname>
                                 is prefixed with an exclamation mark
-                                (!), the test is negated, and the unit
-                                only started if the path does not
-                                exist. Similarly
+                                (<literal>!</literal>), the test is negated, and the unit
+                                is only started if the path does not
+                                exist.</para>
+
+                                <para><varname>ConditionPathExistsGlob=</varname>
+                                is similar to
+                                <varname>ConditionPathExists=</varname>,
+                                but checks for the existence of at
+                                least one file or directory matching
+                                the specified globbing pattern.</para>
+
+                                <para><varname>ConditionPathIsDirectory=</varname>
+                                is similar to
+                                <varname>ConditionPathExists=</varname>
+                                but verifies whether a certain path
+                                exists and is a
+                                directory.</para>
+
+                                <para><varname>ConditionPathIsSymbolicLink=</varname>
+                                is similar to
+                                <varname>ConditionPathExists=</varname>
+                                but verifies whether a certain path
+                                exists and is a symbolic
+                                link.</para>
+
+                                <para><varname>ConditionPathIsMountPoint=</varname>
+                                is similar to
+                                <varname>ConditionPathExists=</varname>
+                                but verifies whether a certain path
+                                exists and is a mount
+                                point.</para>
+
+                                <para><varname>ConditionPathIsReadWrite=</varname>
+                                is similar to
+                                <varname>ConditionPathExists=</varname>
+                                but verifies whether the underlying
+                                file system is readable and writable
+                                (i.e. not mounted
+                                read-only).</para>
+
+                                <para><varname>ConditionDirectoryNotEmpty=</varname>
+                                is similar to
+                                <varname>ConditionPathExists=</varname>
+                                but verifies whether a certain path
+                                exists and is a non-empty
+                                directory.</para>
+
+                                <para><varname>ConditionFileNotEmpty=</varname>
+                                is similar to
+                                <varname>ConditionPathExists=</varname>
+                                but verifies whether a certain path
+                                exists and refers to a regular file
+                                with a non-zero size.</para>
+
+                                <para><varname>ConditionFileIsExecutable=</varname>
+                                is similar to
+                                <varname>ConditionPathExists=</varname>
+                                but verifies whether a certain path
+                                exists, is a regular file and marked
+                                executable.</para>
+
+                                <para>Similar,
                                 <varname>ConditionKernelCommandLine=</varname>
                                 may be used to check whether a
                                 specific kernel command line option is
                                 set (or if prefixed with the
                                 exclamation mark unset). The argument
                                 must either be a single word, or an
-                                assignment (i.e. two words, seperated
-                                by the equality sign). In the former
-                                case the kernel command line is search
-                                for the word appearing as is, or as
-                                left hand side of an assignment. In
-                                the latter case the exact assignment
-                                is looked for with right and left hand
-                                side matching. If multiple conditions
-                                are specified the unit will be
-                                executed iff at least one of them
-                                apply (i.e. a logical OR is
-                                applied).</para></listitem>
+                                assignment (i.e. two words, separated
+                                <literal>=</literal>). In the former
+                                case the kernel command line is
+                                searched for the word appearing as is,
+                                or as left hand side of an
+                                assignment. In the latter case the
+                                exact assignment is looked for with
+                                right and left hand side
+                                matching.</para>
+
+                                <para><varname>ConditionVirtualization=</varname>
+                                may be used to check whether the
+                                system is executed in a virtualized
+                                environment and optionally test
+                                whether it is a specific
+                                implementation. Takes either boolean
+                                value to check if being executed in
+                                any virtualized environment, or one of
+                                <varname>vm</varname> and
+                                <varname>container</varname> to test
+                                against a generic type of
+                                virtualization solution, or one of
+                                <varname>qemu</varname>,
+                                <varname>kvm</varname>,
+                                <varname>vmware</varname>,
+                                <varname>microsoft</varname>,
+                                <varname>oracle</varname>,
+                                <varname>xen</varname>,
+                                <varname>bochs</varname>,
+                                <varname>chroot</varname>,
+                                <varname>uml</varname>,
+                                <varname>openvz</varname>,
+                                <varname>lxc</varname>,
+                                <varname>lxc-libvirt</varname>,
+                                <varname>systemd-nspawn</varname> to
+                                test against a specific
+                                implementation. If multiple
+                                virtualization technologies are nested,
+                                only the innermost is considered. The
+                                test may be negated by prepending an
+                                exclamation mark.</para>
+
+                                <para><varname>ConditionSecurity=</varname>
+                                may be used to check whether the given
+                                security module is enabled on the
+                                system. Currently the recognized values
+                                values are <varname>selinux</varname>,
+                                <varname>apparmor</varname>,
+                                <varname>ima</varname> and
+                                <varname>smack</varname>.
+                                The test may be negated by prepending
+                                an exclamation
+                                mark.</para>
+
+                                <para><varname>ConditionCapability=</varname>
+                                may be used to check whether the given
+                                capability exists in the capability
+                                bounding set of the service manager
+                                (i.e. this does not check whether
+                                capability is actually available in
+                                the permitted or effective sets, see
+                                <citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                                for details). Pass a capability name
+                                such as <literal>CAP_MKNOD</literal>,
+                                possibly prefixed with an exclamation
+                                mark to negate the check.</para>
+
+                                <para><varname>ConditionHost=</varname>
+                                may be used to match against the
+                                hostname or machine ID of the
+                                host. This either takes a hostname
+                                string (optionally with shell style
+                                globs) which is tested against the
+                                locally set hostname as returned by
+                                <citerefentry><refentrytitle>gethostname</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
+                                or a machine ID formatted as string
+                                (see
+                                <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+                                The test may be negated by prepending
+                                an exclamation mark.</para>
+
+                                <para><varname>ConditionACPower=</varname>
+                                may be used to check whether the
+                                system has AC power, or is exclusively
+                                battery powered at the time of
+                                activation of the unit. This takes a
+                                boolean argument. If set to
+                                <varname>true</varname>, the condition
+                                will hold only if at least one AC
+                                connector of the system is connected
+                                to a power source, or if no AC
+                                connectors are known. Conversely, if
+                                set to <varname>false</varname>, the
+                                condition will hold only if there is
+                                at least one AC connector known and
+                                all AC connectors are disconnected
+                                from a power source.</para>
+
+                                <para>Finally,
+                                <varname>ConditionNull=</varname> may
+                                be used to add a constant condition
+                                check value to the unit. It takes a
+                                boolean argument. If set to
+                                <varname>false</varname>, the condition
+                                will always fail, otherwise
+                                succeed.</para>
+
+                                <para>If multiple conditions are
+                                specified, the unit will be executed if
+                                all of them apply (i.e. a logical AND
+                                is applied). Condition checks can be
+                                prefixed with a pipe symbol (|) in
+                                which case a condition becomes a
+                                triggering condition. If at least one
+                                triggering condition is defined for a
+                                unit, then the unit will be executed if
+                                at least one of the triggering
+                                conditions apply and all of the
+                                non-triggering conditions. If you
+                                prefix an argument with the pipe
+                                symbol and an exclamation mark, the
+                                pipe symbol must be passed first, the
+                                exclamation second. Except for
+                                <varname>ConditionPathIsSymbolicLink=</varname>,
+                                all path checks follow symlinks. If
+                                any of these options is assigned the
+                                empty string, the list of conditions is
+                                reset completely, all previous
+                                condition settings (of any kind) will
+                                have no effect.</para></listitem>
+                        </varlistentry>
+
+                        <varlistentry>
+                                <term><varname>SourcePath=</varname></term>
+                                <listitem><para>A path to a
+                                configuration file this unit has been
+                                generated from. This is primarily
+                                useful for implementation of generator
+                                tools that convert configuration from
+                                an external configuration file format
+                                into native unit files. Thus
+                                functionality should not be used in
+                                normal units.</para></listitem>
                         </varlistentry>
                 </variablelist>
 
                 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                 tool during installation of a unit:</para>
 
-                <variablelist>
+                <variablelist class='unit-directives'>
                         <varlistentry>
                                 <term><varname>Alias=</varname></term>
 
                                 time,
                                 <command>systemctl enable</command>
                                 will create symlinks from these names
-                                to the unit file name. Note that this
-                                is different from the
-                                <varname>Names=</varname> option from
-                                the [Unit] section mentioned above:
-                                The names from
-                                <varname>Names=</varname> apply
-                                unconditionally if the unit is
-                                loaded. The names from
-                                <varname>Alias=</varname> apply only
-                                if the unit has actually been
-                                installed with the
-                                <command>systemctl enable</command>
-                                command.  Also, if systemd searches for a
-                                unit, it will discover symlinked alias
-                                names as configured with
-                                <varname>Alias=</varname>, but not
-                                names configured with
-                                <varname>Names=</varname> only. It is
-                                a common pattern to list a name in
-                                both options. In this case, a unit
-                                will be active under all names if
-                                installed, but also if not installed
-                                but requested explicitly under its
-                                main name.</para></listitem>
+                                to the unit filename.</para></listitem>
                         </varlistentry>
 
                         <varlistentry>
                                 <term><varname>WantedBy=</varname></term>
-
-                                <listitem><para>Installs a symlink in
-                                the <filename>.wants/</filename>
-                                subdirectory for a unit. This has the
-                                effect that when the listed unit name
-                                is activated the unit listing it is
-                                activated
-                                too. <command>WantedBy=foo.service</command>
+                                <term><varname>RequiredBy=</varname></term>
+
+                                <listitem><para>A symbolic link is
+                                created in the
+                                <filename>.wants/</filename> or
+                                <filename>.requires/</filename> directory
+                                of the listed unit when this unit is
+                                activated by <command>systemctl
+                                enable</command>.  This has the effect
+                                that a dependency of type
+                                <varname>Wants=</varname> or
+                                <varname>Requires=</varname> is added
+                                from the listed unit to the current
+                                unit. The primary result is that the
+                                current unit will be started when the
+                                listed unit is started. See the
+                                description of
+                                <varname>Wants=</varname> and
+                                <varname>Requires=</varname> in the
+                                [Unit] section for details.</para>
+
+                                <para><command>WantedBy=foo.service</command>
                                 in a service
                                 <filename>bar.service</filename> is
                                 mostly equivalent to
                                 <command>Alias=foo.service.wants/bar.service</command>
-                                in the same file.</para></listitem>
+                                in the same file. In case of template
+                                units, <command>systemctl enable</command>
+                                must be called with an instance name, and
+                                this instance will be added to the
+                                <filename>.wants/</filename> or
+                                <filename>.requires/</filename> list
+                                of the listed unit.
+                                E.g. <command>WantedBy=getty.target</command>
+                                in a service
+                                <filename>getty@.service</filename>
+                                will result in <command>systemctl
+                                enable getty@tty2.service</command>
+                                creating a
+                                <filename>getty.target.wants/getty@tty2.service</filename>
+                                link to <filename>getty@.service</filename>.
+                                </para></listitem>
                         </varlistentry>
 
                         <varlistentry>
                                 <term><varname>Also=</varname></term>
 
                                 <listitem><para>Additional units to
-                                install when this unit is
-                                installed. If the user requests
-                                installation of a unit with this
-                                option configured,
+                                install/deinstall when this unit is
+                                installed/deinstalled. If the user
+                                requests installation/deinstallation
+                                of a unit with this option configured,
                                 <command>systemctl enable</command>
-                                will automatically install units
-                                listed in this option as
+                                and <command>systemctl
+                                disable</command> will automatically
+                                install/uninstall units listed in this option as
                                 well.</para></listitem>
                         </varlistentry>
                 </variablelist>
 
+                <para>The following specifiers are interpreted in the
+                Install section: %n, %N, %p, %i, %U, %u, %m, %H, %b, %v.
+                For their meaning see the next section.
+                </para>
+        </refsect1>
+
+        <refsect1>
+                <title>Specifiers</title>
+
+                <para>Many settings resolve specifiers which may be
+                used to write generic unit files referring to runtime
+                or unit parameters that are replaced when the unit
+                files are loaded. The following specifiers are
+                understood:</para>
+
+                <table>
+                  <title>Specifiers available in unit files</title>
+                  <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+                    <colspec colname="spec" />
+                    <colspec colname="mean" />
+                    <colspec colname="detail" />
+                    <thead>
+                      <row>
+                        <entry>Specifier</entry>
+                        <entry>Meaning</entry>
+                        <entry>Details</entry>
+                      </row>
+                    </thead>
+                    <tbody>
+                      <row>
+                        <entry><literal>%n</literal></entry>
+                        <entry>Full unit name</entry>
+                        <entry></entry>
+                      </row>
+                      <row>
+                        <entry><literal>%N</literal></entry>
+                        <entry>Unescaped full unit name</entry>
+                        <entry></entry>
+                      </row>
+                      <row>
+                        <entry><literal>%p</literal></entry>
+                        <entry>Prefix name</entry>
+                        <entry>For instantiated units this refers to the string before the @. For non-instantiated units this refers to to the name of the unit with the type suffix removed.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%P</literal></entry>
+                        <entry>Unescaped prefix name</entry>
+                        <entry></entry>
+                      </row>
+                      <row>
+                        <entry><literal>%i</literal></entry>
+                        <entry>Instance name</entry>
+                        <entry>For instantiated units: this is the string between the <literal>@</literal> character and the suffix.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%I</literal></entry>
+                        <entry>Unescaped instance name</entry>
+                        <entry></entry>
+                      </row>
+                      <row>
+                        <entry><literal>%f</literal></entry>
+                        <entry>Unescaped filename</entry>
+                        <entry>This is either the unescaped instance name (if applicable) with <filename>/</filename> prepended (if applicable), or the prefix name similarly prepended with <filename>/</filename>.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%c</literal></entry>
+                        <entry>Control group path of the unit</entry>
+                        <entry></entry>
+                      </row>
+                      <row>
+                        <entry><literal>%r</literal></entry>
+                        <entry>Root control group path where units are placed.</entry>
+                        <entry>For system instances this usually resolves to <filename>/system</filename>, except in containers, where the path might be prefixed with the container's root control group.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%R</literal></entry>
+                        <entry>Parent directory of the control group path where units are placed.</entry>
+                        <entry>For system instances this usually resolves to <filename>/</filename>, except in containers, where this resolves to the container's root directory. This specifier is particularly useful in the <varname>ControlGroup=</varname> setting (see <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>).</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%t</literal></entry>
+                        <entry>Runtime socket dir</entry>
+                        <entry>This is either <filename>/run</filename> (for the system manager) or <literal>$XDG_RUNTIME_DIR</literal> (for user managers).</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%u</literal></entry>
+                        <entry>User name</entry>
+                        <entry>This is the name of the configured user of the unit, or (if none is set) the user running the systemd instance.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%U</literal></entry>
+                        <entry>User UID</entry>
+                        <entry>This is the UID of the configured user of the unit, or (if none is set) the user running the systemd instance.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%h</literal></entry>
+                        <entry>User home directory</entry>
+                        <entry>This is the home directory of the configured user of the unit, or (if none is set) the user running the systemd instance.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%s</literal></entry>
+                        <entry>User shell</entry>
+                        <entry>This is the shell of the configured user of the unit, or (if none is set) the user running the systemd instance.  If the user is <literal>root</literal> (UID equal to 0), the shell configured in account database is ignored and <filename>/bin/sh</filename> is always used.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%m</literal></entry>
+                        <entry>Machine ID</entry>
+                        <entry>The machine ID of the running system, formatted as string. See <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%b</literal></entry>
+                        <entry>Boot ID</entry>
+                        <entry>The boot ID of the running system, formatted as string. See <citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry> for more information.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%H</literal></entry>
+                        <entry>Host name</entry>
+                        <entry>The hostname of the running system.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%v</literal></entry>
+                        <entry>Kernel release</entry>
+                        <entry>Identical to <command>uname -r</command> output.</entry>
+                      </row>
+                      <row>
+                        <entry><literal>%%</literal></entry>
+                        <entry>Escaped %</entry>
+                        <entry>Single percent sign.</entry>
+                      </row>
+                    </tbody>
+                  </tgroup>
+                </table>
         </refsect1>
 
         <refsect1>
                         <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                         <citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                        <citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                        <citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>uname</refentrytitle><manvolnum>1</manvolnum></citerefentry>
                 </para>
         </refsect1>