]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - man/systemd.service.xml
man: systemd.unit(5): add examples for common tasks
[thirdparty/systemd.git] / man / systemd.service.xml
index dbc82edbd47bbcf0e56662faaa3a2abf59b6daa4..4c890dfb7bbff42672a66f4a00fbcf7f2baa2268 100644 (file)
                                 as. This option is mandatory for
                                 services where
                                 <varname>Type=</varname> is set to
-                                <option>dbus</option>, but its use
-                                is otherwise recommended if the process
-                                takes a name on the D-Bus bus.</para>
+                                <option>dbus</option>.</para>
                                 </listitem>
                         </varlistentry>
 
                                 used, zero or more commands may be
                                 specified. This can be specified by
                                 providing multiple command lines in
-                                the same directive , or alternatively,
+                                the same directive, or alternatively,
                                 this directive may be specified more
                                 than once with the same effect. If the
                                 empty string is assigned to this
 
                                 <para>For each of the specified
                                 commands, the first argument must be
-                                an absolute and literal path to an
-                                executable. Optionally, if the
-                                absolute file name is prefixed with
-                                <literal>@</literal>, the second token
-                                will be passed as
+                                an absolute path to an executable.
+                                Optionally, if this file name is
+                                prefixed with <literal>@</literal>,
+                                the second token will be passed as
                                 <literal>argv[0]</literal> to the
                                 executed process, followed by the
                                 further arguments specified. If the
                                 when <varname>Type=oneshot</varname> is
                                 used, in which case the timeout
                                 is disabled by default
-                                (see <citerefentry><refentrytitle>systemd-systemd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+                                (see <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
                                 </para></listitem>
                         </varlistentry>
 
                                 the timeout logic. Defaults to
                                 <varname>DefaultTimeoutStopSec=</varname> from the
                                 manager configuration file
-                                (see <citerefentry><refentrytitle>systemd-systemd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+                                (see <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
                                 </para></listitem>
                         </varlistentry>
 
                                 (i.e. the "keep-alive ping"). If the time
                                 between two such calls is larger than
                                 the configured time, then the service
-                                is placed in a failed state. By
-                                setting <varname>Restart=</varname> to
+                                is placed in a failed state and it will
+                                be terminated with <varname>SIGABRT</varname>.
+                                By setting <varname>Restart=</varname> to
                                 <option>on-failure</option> or
                                 <option>always</option>, the service
                                 will be automatically restarted. The
                                 <term><varname>Sockets=</varname></term>
                                 <listitem><para>Specifies the name of
                                 the socket units this service shall
-                                inherit the sockets from when the
-                                service is started. Normally it
-                                should not be necessary to use this
-                                setting as all sockets whose unit
+                                inherit socket file descriptors
+                                from when the service is
+                                started. Normally it should not be
+                                necessary to use this setting as all
+                                socket file descriptors whose unit
                                 shares the same name as the service
-                                (ignoring the different suffix of course)
-                                are passed to the spawned
-                                process.</para>
-
-                                <para>Note that the same socket may be
-                                passed to multiple processes at the
-                                same time. Also note that a different
-                                service may be activated on incoming
-                                traffic than that which inherits the
-                                sockets. Or in other words: the
+                                (subject to the different unit name
+                                suffix of course) are passed to the
+                                spawned process.</para>
+
+                                <para>Note that the same socket file
+                                descriptors may be passed to multiple
+                                processes simultaneously. Also note
+                                that a different service may be
+                                activated on incoming socket traffic
+                                than the one which is ultimately
+                                configured to inherit the socket file
+                                descriptors. Or in other words: the
                                 <varname>Service=</varname> setting of
                                 <filename>.socket</filename> units
                                 does not have to match the inverse of
                                 command.</para></listitem>
                         </varlistentry>
 
+                        <varlistentry>
+                                <term><varname>FileDescriptorStoreMax=</varname></term>
+                                <listitem><para>Configure how many
+                                file descriptors may be stored in the
+                                service manager for the service using
+                                <citerefentry><refentrytitle>sd_pid_notify_with_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>'s
+                                <literal>FDSTORE=1</literal>
+                                messages. This is useful for
+                                implementing service restart schemes
+                                where the state is serialized to
+                                <filename>/run</filename> and the file
+                                descriptors passed to the service
+                                manager, to allow restarts without
+                                losing state. Defaults to 0, i.e. no
+                                file descriptors may be stored in the
+                                service manager by default. All file
+                                descriptors passed to the service
+                                manager from a specific service are
+                                passed back to the service's main
+                                process on the next service
+                                restart. Any file descriptors passed
+                                to the service manager are
+                                automatically closed when POLLHUP or
+                                POLLERR is seen on them, or when the
+                                service is fully stopped and no job
+                                queued or being executed for
+                                it.</para></listitem>
+                        </varlistentry>
+
                 </variablelist>
 
                 <para>Check
 
         </refsect1>
 
-        <refsect1>
-                <title>Compatibility Options</title>
-
-                <para>The following options are also available in the
-                <literal>[Service]</literal> section, but exist purely
-                for compatibility reasons and should not be used in
-                newly written service files.</para>
-
-                <variablelist class='unit-directives'>
-                        <varlistentry>
-                                <term><varname>SysVStartPriority=</varname></term>
-                                <listitem><para>Set the SysV start
-                                priority to use to order this service
-                                in relation to SysV services lacking
-                                LSB headers. This option is only
-                                necessary to fix ordering in relation
-                                to legacy SysV services that have no
-                                ordering information encoded in the
-                                script headers. As such, it should only
-                                be used as a temporary compatibility
-                                option and should not be used in new unit
-                                files. Almost always, it is a better
-                                choice to add explicit ordering
-                                directives via
-                                <varname>After=</varname> or
-                                <varname>Before=</varname>,
-                                instead. For more details, see
-                                <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
-                                If used, pass an integer value in the
-                                range 0-99.</para></listitem>
-                        </varlistentry>
-                </variablelist>
-        </refsect1>
-
         <refsect1>
                 <title>Command lines</title>
 
 
                 <para>Each command line is split on whitespace, with
                 the first item being the command to execute, and the
-                subsequent items being the arguments.  Double quotes
+                subsequent items being the arguments. Double quotes
                 ("...") and single quotes ('...') may be used, in
                 which case everything until the next matching quote
-                becomes part of the same argument. Quotes themselves
-                are removed after parsing. In addition, a trailing
-                backslash (<literal>\</literal>) may be used to merge
-                lines. </para>
+                becomes part of the same argument. C-style escapes are
+                also supported, see table below. Quotes themselves are
+                removed after parsing and escape sequences
+                substituted. In addition, a trailing backslash
+                (<literal>\</literal>) may be used to merge lines.
+                </para>
 
                 <para>This syntax is intended to be very similar to
                 shell syntax, but only the meta-characters and
                 <emphasis>other elements of shell syntax are not
                 supported</emphasis>.</para>
 
+                <para>The command to execute must an absolute path
+                name. It may contain spaces, but control characters
+                are not allowed.</para>
+
                 <para>The command line accepts <literal>%</literal>
                 specifiers as described in
                 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
                 contains, resulting in a single argument. Use
                 <literal>$FOO</literal> as a separate word on the
                 command line, in which case it will be replaced by the
-                value of the environment variable split at whitespace,
-                resulting in zero or more arguments. To pass a literal
-                dollar sign, use <literal>$$</literal>.  Variables
-                whose value is not known at expansion time are treated
-                as empty strings. Note that the first argument
-                (i.e. the program to execute) may not be a
-                variable.</para>
+                value of the environment variable split at whitespace
+                resulting in zero or more arguments. For this type of
+                expansion, quotes and respected when splitting into
+                words, and afterwards removed.</para>
+
+                <para>Example:</para>
+
+                <programlisting>Environment="ONE=one" 'TWO=two two'
+ExecStart=/bin/echo $ONE $TWO ${TWO}</programlisting>
+
+                <para>This will execute <command>/bin/echo</command>
+                with four arguments: <literal>one</literal>,
+                <literal>two</literal>, <literal>two</literal>, and
+                <literal>two two</literal>.</para>
+
+                <para>Example:</para>
+                <programlisting>Environment=ONE='one' "TWO='two two' too" THREE=
+ExecStart=/bin/echo ${ONE} ${TWO} ${THREE}
+ExecStart=/bin/echo $ONE $TWO $THREE</programlisting>
+                <para>This results in <filename>echo</filename> being
+                called twice, the first time with arguments
+                <literal>'one'</literal>,
+                <literal>'two two' too</literal>, <literal></literal>,
+                and the second time with arguments
+                <literal>one</literal>, <literal>two two</literal>,
+                <literal>too</literal>.
+                </para>
+
+                <para>To pass a literal dollar sign, use
+                <literal>$$</literal>. Variables whose value is not
+                known at expansion time are treated as empty
+                strings. Note that the first argument (i.e. the
+                program to execute) may not be a variable.</para>
 
                 <para>Variables to be used in this fashion may be
                 defined through <varname>Environment=</varname> and
                 <literal>&amp;</literal>, <literal>;</literal>, and
                 <literal>/bin/ls</literal>.</para>
 
-                <para>Example:</para>
-
-                <programlisting>Environment="ONE=one" 'TWO=two two'
-ExecStart=/bin/echo $ONE $TWO ${TWO}</programlisting>
-
-                <para>This will execute <command>/bin/echo</command>
-                with four arguments: <literal>one</literal>,
-                <literal>two</literal>, <literal>two</literal>, and
-                <literal>two two</literal>.</para>
+                <table>
+                        <title>C escapes supported in command lines and environment variables</title>
+                        <tgroup cols='2'>
+                                <colspec colname='escape' />
+                                <colspec colname='meaning' />
+                                <thead>
+                                        <row>
+                                                <entry>Literal</entry>
+                                                <entry>Actual value</entry>
+                                        </row>
+                                </thead>
+                                <tbody>
+                                        <row>
+                                                <entry><literal>\a</literal></entry>
+                                                <entry>bell</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\b</literal></entry>
+                                                <entry>backspace</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\f</literal></entry>
+                                                <entry>form feed</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\n</literal></entry>
+                                                <entry>newline</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\r</literal></entry>
+                                                <entry>carriage return</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\t</literal></entry>
+                                                <entry>tab</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\v</literal></entry>
+                                                <entry>vertical tab</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\\</literal></entry>
+                                                <entry>backslash</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\"</literal></entry>
+                                                <entry>double quotation mark</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\'</literal></entry>
+                                                <entry>single quotation mark</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\s</literal></entry>
+                                                <entry>space</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\x<replaceable>xx</replaceable></literal></entry>
+                                                <entry>character number <replaceable>xx</replaceable> in hexadecimal encoding</entry>
+                                        </row>
+                                        <row>
+                                                <entry><literal>\<replaceable>nnn</replaceable></literal></entry>
+                                                <entry>character number <replaceable>nnn</replaceable> in octal encoding</entry>
+                                        </row>
+                                </tbody>
+                        </tgroup>
+                </table>
         </refsect1>
 
         <refsect1>