]> git.ipfire.org Git - thirdparty/systemd.git/blob - man/systemd.unit.xml
Merge pull request #4243 from endocode/djalal/sandbox-first-protection-kernelmodules-v1
[thirdparty/systemd.git] / man / systemd.unit.xml
1 <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
4 <!ENTITY % entities SYSTEM "custom-entities.ent" >
5 %entities;
6 ]>
7
8 <!--
9 This file is part of systemd.
10
11 Copyright 2010 Lennart Poettering
12
13 systemd is free software; you can redistribute it and/or modify it
14 under the terms of the GNU Lesser General Public License as published by
15 the Free Software Foundation; either version 2.1 of the License, or
16 (at your option) any later version.
17
18 systemd is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 Lesser General Public License for more details.
22
23 You should have received a copy of the GNU Lesser General Public License
24 along with systemd; If not, see <http://www.gnu.org/licenses/>.
25 -->
26
27 <refentry id="systemd.unit">
28
29 <refentryinfo>
30 <title>systemd.unit</title>
31 <productname>systemd</productname>
32
33 <authorgroup>
34 <author>
35 <contrib>Developer</contrib>
36 <firstname>Lennart</firstname>
37 <surname>Poettering</surname>
38 <email>lennart@poettering.net</email>
39 </author>
40 </authorgroup>
41 </refentryinfo>
42
43 <refmeta>
44 <refentrytitle>systemd.unit</refentrytitle>
45 <manvolnum>5</manvolnum>
46 </refmeta>
47
48 <refnamediv>
49 <refname>systemd.unit</refname>
50 <refpurpose>Unit configuration</refpurpose>
51 </refnamediv>
52
53 <refsynopsisdiv>
54 <para><filename><replaceable>service</replaceable>.service</filename>,
55 <filename><replaceable>socket</replaceable>.socket</filename>,
56 <filename><replaceable>device</replaceable>.device</filename>,
57 <filename><replaceable>mount</replaceable>.mount</filename>,
58 <filename><replaceable>automount</replaceable>.automount</filename>,
59 <filename><replaceable>swap</replaceable>.swap</filename>,
60 <filename><replaceable>target</replaceable>.target</filename>,
61 <filename><replaceable>path</replaceable>.path</filename>,
62 <filename><replaceable>timer</replaceable>.timer</filename>,
63 <filename><replaceable>slice</replaceable>.slice</filename>,
64 <filename><replaceable>scope</replaceable>.scope</filename></para>
65
66 <para><literallayout><filename>/etc/systemd/system/*</filename>
67 <filename>/run/systemd/system/*</filename>
68 <filename>/usr/lib/systemd/system/*</filename>
69 <filename></filename>
70 </literallayout></para>
71
72 <para><literallayout><filename>~/.config/systemd/user/*</filename>
73 <filename>/etc/systemd/user/*</filename>
74 <filename>$XDG_RUNTIME_DIR/systemd/user/*</filename>
75 <filename>/run/systemd/user/*</filename>
76 <filename>~/.local/share/systemd/user/*</filename>
77 <filename>/usr/lib/systemd/user/*</filename>
78 <filename></filename>
79 </literallayout></para>
80 </refsynopsisdiv>
81
82 <refsect1>
83 <title>Description</title>
84
85 <para>A unit configuration file encodes information about a
86 service, a socket, a device, a mount point, an automount point, a
87 swap file or partition, a start-up target, a watched file system
88 path, a timer controlled and supervised by
89 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
90 a resource management slice or
91 a group of externally created processes. The syntax is inspired by
92 <ulink
93 url="http://standards.freedesktop.org/desktop-entry-spec/latest/">XDG
94 Desktop Entry Specification</ulink> <filename>.desktop</filename>
95 files, which are in turn inspired by Microsoft Windows
96 <filename>.ini</filename> files.</para>
97
98 <para>This man page lists the common configuration options of all
99 the unit types. These options need to be configured in the [Unit]
100 or [Install] sections of the unit files.</para>
101
102 <para>In addition to the generic [Unit] and [Install] sections
103 described here, each unit may have a type-specific section, e.g.
104 [Service] for a service unit. See the respective man pages for
105 more information:
106 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
107 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
108 <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
109 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
110 <citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
111 <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
112 <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
113 <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
114 <citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
115 <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
116 <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
117 </para>
118
119 <para>Various settings are allowed to be specified more than once,
120 in which case the interpretation depends on the setting. Often,
121 multiple settings form a list, and setting to an empty value
122 "resets", which means that previous assignments are ignored. When
123 this is allowed, it is mentioned in the description of the
124 setting. Note that using multiple assignments to the same value
125 makes the unit file incompatible with parsers for the XDG
126 <filename>.desktop</filename> file format.</para>
127
128 <para>Unit files are loaded from a set of paths determined during
129 compilation, described in the next section.</para>
130
131 <para>Unit files may contain additional options on top of those
132 listed here. If systemd encounters an unknown option, it will
133 write a warning log message but continue loading the unit. If an
134 option or section name is prefixed with <option>X-</option>, it is
135 ignored completely by systemd. Options within an ignored section
136 do not need the prefix. Applications may use this to include
137 additional information in the unit files.</para>
138
139 <para>Boolean arguments used in unit files can be written in
140 various formats. For positive settings the strings
141 <option>1</option>, <option>yes</option>, <option>true</option>
142 and <option>on</option> are equivalent. For negative settings, the
143 strings <option>0</option>, <option>no</option>,
144 <option>false</option> and <option>off</option> are
145 equivalent.</para>
146
147 <para>Time span values encoded in unit files can be written in various formats. A stand-alone
148 number specifies a time in seconds. If suffixed with a time unit, the unit is honored. A
149 concatenation of multiple values with units is supported, in which case the values are added
150 up. Example: <literal>50</literal> refers to 50 seconds; <literal>2min 200ms</literal> refers to
151 2 minutes and 200 milliseconds, i.e. 120200 ms. The following time units are understood:
152 <literal>s</literal>, <literal>min</literal>, <literal>h</literal>, <literal>d</literal>,
153 <literal>w</literal>, <literal>ms</literal>, <literal>us</literal>. For details see
154 <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
155
156 <para>Empty lines and lines starting with <literal>#</literal> or <literal>;</literal> are
157 ignored. This may be used for commenting. Lines ending in a backslash are concatenated with the
158 following line while reading and the backslash is replaced by a space character. This may be
159 used to wrap long lines.</para>
160
161 <para>Units can be aliased (have an alternative name), by creating a symlink from the new name
162 to the existing name in one of the unit search paths. For example,
163 <filename>systemd-networkd.service</filename> has the alias
164 <filename>dbus-org.freedesktop.network1.service</filename>, created during installation as the
165 symlink <filename>/usr/lib/systemd/system/dbus-org.freedesktop.network1.service</filename>. In
166 addition, unit files may specify aliases through the <varname>Alias=</varname> directive in the
167 [Install] section; those aliases are only effective when the unit is enabled. When the unit is
168 enabled, symlinks will be created for those names, and removed when the unit is disabled. For
169 example, <filename>reboot.target</filename> specifies
170 <varname>Alias=ctrl-alt-del.target</varname>, so when enabled it will be invoked whenever
171 CTRL+ALT+DEL is pressed. Alias names may be used in commands like <command>enable</command>,
172 <command>disable</command>, <command>start</command>, <command>stop</command>,
173 <command>status</command>, …, and in unit dependency directives <varname>Wants=</varname>,
174 <varname>Requires=</varname>, <varname>Before=</varname>, <varname>After=</varname>, …, with the
175 limitation that aliases specified through <varname>Alias=</varname> are only effective when the
176 unit is enabled. Aliases cannot be used with the <command>preset</command> command.</para>
177
178 <para>Along with a unit file <filename>foo.service</filename>, the directory
179 <filename>foo.service.wants/</filename> may exist. All unit files symlinked from such a
180 directory are implicitly added as dependencies of type <varname>Wants=</varname> to the unit.
181 This is useful to hook units into the start-up of other units, without having to modify their
182 unit files. For details about the semantics of <varname>Wants=</varname>, see below. The
183 preferred way to create symlinks in the <filename>.wants/</filename> directory of a unit file is
184 with the <command>enable</command> command of the
185 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
186 tool which reads information from the [Install] section of unit files (see below). A similar
187 functionality exists for <varname>Requires=</varname> type dependencies as well, the directory
188 suffix is <filename>.requires/</filename> in this case.</para>
189
190 <para>Along with a unit file <filename>foo.service</filename>, a "drop-in" directory
191 <filename>foo.service.d/</filename> may exist. All files with the suffix
192 <literal>.conf</literal> from this directory will be parsed after the file itself is
193 parsed. This is useful to alter or add configuration settings for a unit, without having to
194 modify unit files. Each drop-in file must have appropriate section headers. Note that for
195 instantiated units, this logic will first look for the instance <literal>.d/</literal>
196 subdirectory and read its <literal>.conf</literal> files, followed by the template
197 <literal>.d/</literal> subdirectory and the <literal>.conf</literal> files there. Also note that
198 settings from the <literal>[Install]</literal> section are not honored in drop-in unit files,
199 and have no effect.</para>
200
201 <para>In addition to <filename>/etc/systemd/system</filename>, the drop-in <literal>.d</literal>
202 directories for system services can be placed in <filename>/usr/lib/systemd/system</filename> or
203 <filename>/run/systemd/system</filename> directories. Drop-in files in <filename>/etc</filename>
204 take precedence over those in <filename>/run</filename> which in turn take precedence over those
205 in <filename>/usr/lib</filename>. Drop-in files under any of these directories take precedence
206 over unit files wherever located. (Of course, since <filename>/run</filename> is temporary and
207 <filename>/usr/lib</filename> is for vendors, it is unlikely drop-ins should be used in either
208 of those places.)</para>
209
210 <!-- Note that we do not document .include here, as we consider it mostly obsolete, and want
211 people to use .d/ drop-ins instead. -->
212
213 <para>Some unit names reflect paths existing in the file system
214 namespace. Example: a device unit
215 <filename>dev-sda.device</filename> refers to a device with the
216 device node <filename noindex='true'>/dev/sda</filename> in the
217 file system namespace. If this applies, a special way to escape
218 the path name is used, so that the result is usable as part of a
219 filename. Basically, given a path, "/" is replaced by "-", and all
220 other characters which are not ASCII alphanumerics are replaced by
221 C-style "\x2d" escapes (except that "_" is never replaced and "."
222 is only replaced when it would be the first character in the
223 escaped path). The root directory "/" is encoded as single dash,
224 while otherwise the initial and ending "/" are removed from all
225 paths during transformation. This escaping is reversible. Properly
226 escaped paths can be generated using the
227 <citerefentry><refentrytitle>systemd-escape</refentrytitle><manvolnum>1</manvolnum></citerefentry>
228 command.</para>
229
230 <para>Optionally, units may be instantiated from a
231 template file at runtime. This allows creation of
232 multiple units from a single configuration file. If
233 systemd looks for a unit configuration file, it will
234 first search for the literal unit name in the
235 file system. If that yields no success and the unit
236 name contains an <literal>@</literal> character, systemd will look for a
237 unit template that shares the same name but with the
238 instance string (i.e. the part between the <literal>@</literal> character
239 and the suffix) removed. Example: if a service
240 <filename>getty@tty3.service</filename> is requested
241 and no file by that name is found, systemd will look
242 for <filename>getty@.service</filename> and
243 instantiate a service from that configuration file if
244 it is found.</para>
245
246 <para>To refer to the instance string from within the
247 configuration file you may use the special <literal>%i</literal>
248 specifier in many of the configuration options. See below for
249 details.</para>
250
251 <para>If a unit file is empty (i.e. has the file size 0) or is
252 symlinked to <filename>/dev/null</filename>, its configuration
253 will not be loaded and it appears with a load state of
254 <literal>masked</literal>, and cannot be activated. Use this as an
255 effective way to fully disable a unit, making it impossible to
256 start it even manually.</para>
257
258 <para>The unit file format is covered by the
259 <ulink
260 url="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise">Interface
261 Stability Promise</ulink>.</para>
262
263 </refsect1>
264
265 <refsect1>
266 <title>Automatic Dependencies</title>
267
268 <para>Note that while systemd offers a flexible dependency system
269 between units it is recommended to use this functionality only
270 sparingly and instead rely on techniques such as bus-based or
271 socket-based activation which make dependencies implicit,
272 resulting in a both simpler and more flexible system.</para>
273
274 <para>A number of unit dependencies are automatically established,
275 depending on unit configuration. On top of that, for units with
276 <varname>DefaultDependencies=yes</varname> (the default) a couple
277 of additional dependencies are added. The precise effect of
278 <varname>DefaultDependencies=yes</varname> depends on the unit
279 type (see below).</para>
280
281 <para>If <varname>DefaultDependencies=yes</varname> is set, units
282 that are referenced by other units of type
283 <filename>.target</filename> via a <varname>Wants=</varname> or
284 <varname>Requires=</varname> dependency might automatically gain
285 an <varname>Before=</varname> dependency too. See
286 <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>
287 for details.</para>
288 </refsect1>
289
290 <refsect1>
291 <title>Unit File Load Path</title>
292
293 <para>Unit files are loaded from a set of paths determined during
294 compilation, described in the two tables below. Unit files found
295 in directories listed earlier override files with the same name in
296 directories lower in the list.</para>
297
298 <para>When the variable <varname>$SYSTEMD_UNIT_PATH</varname> is set,
299 the contents of this variable overrides the unit load path. If
300 <varname>$SYSTEMD_UNIT_PATH</varname> ends with an empty component
301 (<literal>:</literal>), the usual unit load path will be appended
302 to the contents of the variable.</para>
303
304 <table>
305 <title>
306 Load path when running in system mode (<option>--system</option>).
307 </title>
308
309 <tgroup cols='2'>
310 <colspec colname='path' />
311 <colspec colname='expl' />
312 <thead>
313 <row>
314 <entry>Path</entry>
315 <entry>Description</entry>
316 </row>
317 </thead>
318 <tbody>
319 <row>
320 <entry><filename>/etc/systemd/system</filename></entry>
321 <entry>Local configuration</entry>
322 </row>
323 <row>
324 <entry><filename>/run/systemd/system</filename></entry>
325 <entry>Runtime units</entry>
326 </row>
327 <row>
328 <entry><filename>/usr/lib/systemd/system</filename></entry>
329 <entry>Units of installed packages</entry>
330 </row>
331 </tbody>
332 </tgroup>
333 </table>
334
335 <table>
336 <title>
337 Load path when running in user mode (<option>--user</option>).
338 </title>
339
340 <tgroup cols='2'>
341 <colspec colname='path' />
342 <colspec colname='expl' />
343 <thead>
344 <row>
345 <entry>Path</entry>
346 <entry>Description</entry>
347 </row>
348 </thead>
349 <tbody>
350 <row>
351 <entry><filename>$XDG_CONFIG_HOME/systemd/user</filename></entry>
352 <entry>User configuration (only used when $XDG_CONFIG_HOME is set)</entry>
353 </row>
354 <row>
355 <entry><filename>$HOME/.config/systemd/user</filename></entry>
356 <entry>User configuration (only used when $XDG_CONFIG_HOME is not set)</entry>
357 </row>
358 <row>
359 <entry><filename>/etc/systemd/user</filename></entry>
360 <entry>Local configuration</entry>
361 </row>
362 <row>
363 <entry><filename>$XDG_RUNTIME_DIR/systemd/user</filename></entry>
364 <entry>Runtime units (only used when $XDG_RUNTIME_DIR is set)</entry>
365 </row>
366 <row>
367 <entry><filename>/run/systemd/user</filename></entry>
368 <entry>Runtime units</entry>
369 </row>
370 <row>
371 <entry><filename>$XDG_DATA_HOME/systemd/user</filename></entry>
372 <entry>Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is set)</entry>
373 </row>
374 <row>
375 <entry><filename>$HOME/.local/share/systemd/user</filename></entry>
376 <entry>Units of packages that have been installed in the home directory (only used when $XDG_DATA_HOME is not set)</entry>
377 </row>
378 <row>
379 <entry><filename>/usr/lib/systemd/user</filename></entry>
380 <entry>Units of packages that have been installed system-wide</entry>
381 </row>
382 </tbody>
383 </tgroup>
384 </table>
385
386 <para>Additional units might be loaded into systemd ("linked")
387 from directories not on the unit load path. See the
388 <command>link</command> command for
389 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
390 Also, some units are dynamically created via a
391 <citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
392 </para>
393 </refsect1>
394
395 <refsect1>
396 <title>[Unit] Section Options</title>
397
398 <para>The unit file may include a [Unit] section, which carries
399 generic information about the unit that is not dependent on the
400 type of unit:</para>
401
402 <variablelist class='unit-directives'>
403
404 <varlistentry>
405 <term><varname>Description=</varname></term>
406 <listitem><para>A free-form string describing the unit. This
407 is intended for use in UIs to show descriptive information
408 along with the unit name. The description should contain a
409 name that means something to the end user. <literal>Apache2
410 Web Server</literal> is a good example. Bad examples are
411 <literal>high-performance light-weight HTTP server</literal>
412 (too generic) or <literal>Apache2</literal> (too specific and
413 meaningless for people who do not know
414 Apache).</para></listitem>
415 </varlistentry>
416
417 <varlistentry>
418 <term><varname>Documentation=</varname></term>
419 <listitem><para>A space-separated list of URIs referencing
420 documentation for this unit or its configuration. Accepted are
421 only URIs of the types <literal>http://</literal>,
422 <literal>https://</literal>, <literal>file:</literal>,
423 <literal>info:</literal>, <literal>man:</literal>. For more
424 information about the syntax of these URIs, see <citerefentry
425 project='man-pages'><refentrytitle>uri</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
426 The URIs should be listed in order of relevance, starting with
427 the most relevant. It is a good idea to first reference
428 documentation that explains what the unit's purpose is,
429 followed by how it is configured, followed by any other
430 related documentation. This option may be specified more than
431 once, in which case the specified list of URIs is merged. If
432 the empty string is assigned to this option, the list is reset
433 and all prior assignments will have no
434 effect.</para></listitem>
435 </varlistentry>
436
437 <varlistentry>
438 <term><varname>Requires=</varname></term>
439
440 <listitem><para>Configures requirement dependencies on other
441 units. If this unit gets activated, the units listed here will
442 be activated as well. If one of the other units gets
443 deactivated or its activation fails, this unit will be
444 deactivated. This option may be specified more than once or
445 multiple space-separated units may be specified in one option
446 in which case requirement dependencies for all listed names
447 will be created. Note that requirement dependencies do not
448 influence the order in which services are started or stopped.
449 This has to be configured independently with the
450 <varname>After=</varname> or <varname>Before=</varname>
451 options. If a unit <filename>foo.service</filename> requires a
452 unit <filename>bar.service</filename> as configured with
453 <varname>Requires=</varname> and no ordering is configured
454 with <varname>After=</varname> or <varname>Before=</varname>,
455 then both units will be started simultaneously and without any
456 delay between them if <filename>foo.service</filename> is
457 activated. Often, it is a better choice to use
458 <varname>Wants=</varname> instead of
459 <varname>Requires=</varname> in order to achieve a system that
460 is more robust when dealing with failing services.</para>
461
462 <para>Note that dependencies of this type may also be
463 configured outside of the unit configuration file by adding a
464 symlink to a <filename>.requires/</filename> directory
465 accompanying the unit file. For details, see
466 above.</para></listitem>
467 </varlistentry>
468
469 <varlistentry>
470 <term><varname>Requisite=</varname></term>
471
472 <listitem><para>Similar to <varname>Requires=</varname>.
473 However, if the units listed here are not started already,
474 they will not be started and the transaction will fail
475 immediately. </para></listitem>
476 </varlistentry>
477
478 <varlistentry>
479 <term><varname>Wants=</varname></term>
480
481 <listitem><para>A weaker version of
482 <varname>Requires=</varname>. Units listed in this option will
483 be started if the configuring unit is. However, if the listed
484 units fail to start or cannot be added to the transaction,
485 this has no impact on the validity of the transaction as a
486 whole. This is the recommended way to hook start-up of one
487 unit to the start-up of another unit.</para>
488
489 <para>Note that dependencies of this type may also be
490 configured outside of the unit configuration file by adding
491 symlinks to a <filename>.wants/</filename> directory
492 accompanying the unit file. For details, see
493 above.</para></listitem>
494 </varlistentry>
495
496 <varlistentry>
497 <term><varname>BindsTo=</varname></term>
498
499 <listitem><para>Configures requirement dependencies, very
500 similar in style to <varname>Requires=</varname>, however in
501 addition to this behavior, it also declares that this unit is
502 stopped when any of the units listed suddenly disappears.
503 Units can suddenly, unexpectedly disappear if a service
504 terminates on its own choice, a device is unplugged or a mount
505 point unmounted without involvement of
506 systemd.</para></listitem>
507 </varlistentry>
508
509 <varlistentry>
510 <term><varname>PartOf=</varname></term>
511
512 <listitem><para>Configures dependencies similar to
513 <varname>Requires=</varname>, but limited to stopping and
514 restarting of units. When systemd stops or restarts the units
515 listed here, the action is propagated to this unit. Note that
516 this is a one-way dependency — changes to this unit do not
517 affect the listed units. </para></listitem>
518 </varlistentry>
519
520 <varlistentry>
521 <term><varname>Conflicts=</varname></term>
522
523 <listitem><para>A space-separated list of unit names.
524 Configures negative requirement dependencies. If a unit has a
525 <varname>Conflicts=</varname> setting on another unit,
526 starting the former will stop the latter and vice versa. Note
527 that this setting is independent of and orthogonal to the
528 <varname>After=</varname> and <varname>Before=</varname>
529 ordering dependencies.</para>
530
531 <para>If a unit A that conflicts with a unit B is scheduled to
532 be started at the same time as B, the transaction will either
533 fail (in case both are required part of the transaction) or be
534 modified to be fixed (in case one or both jobs are not a
535 required part of the transaction). In the latter case, the job
536 that is not the required will be removed, or in case both are
537 not required, the unit that conflicts will be started and the
538 unit that is conflicted is stopped.</para></listitem>
539 </varlistentry>
540
541 <varlistentry>
542 <term><varname>Before=</varname></term>
543 <term><varname>After=</varname></term>
544
545 <listitem><para>A space-separated list of unit names.
546 Configures ordering dependencies between units. If a unit
547 <filename>foo.service</filename> contains a setting
548 <option>Before=bar.service</option> and both units are being
549 started, <filename>bar.service</filename>'s start-up is
550 delayed until <filename>foo.service</filename> is started up.
551 Note that this setting is independent of and orthogonal to the
552 requirement dependencies as configured by
553 <varname>Requires=</varname>. It is a common pattern to
554 include a unit name in both the <varname>After=</varname> and
555 <varname>Requires=</varname> option, in which case the unit
556 listed will be started before the unit that is configured with
557 these options. This option may be specified more than once, in
558 which case ordering dependencies for all listed names are
559 created. <varname>After=</varname> is the inverse of
560 <varname>Before=</varname>, i.e. while
561 <varname>After=</varname> ensures that the configured unit is
562 started after the listed unit finished starting up,
563 <varname>Before=</varname> ensures the opposite, i.e. that the
564 configured unit is fully started up before the listed unit is
565 started. Note that when two units with an ordering dependency
566 between them are shut down, the inverse of the start-up order
567 is applied. i.e. if a unit is configured with
568 <varname>After=</varname> on another unit, the former is
569 stopped before the latter if both are shut down. Given two units
570 with any ordering dependency between them, if one unit is shut
571 down and the other is started up, the shutdown is ordered
572 before the start-up. It doesn't matter if the ordering
573 dependency is <varname>After=</varname> or
574 <varname>Before=</varname>. It also doesn't matter which of the
575 two is shut down, as long as one is shut down and the other is
576 started up. The shutdown is ordered before the start-up in all
577 cases. If two units have no ordering dependencies between them,
578 they are shut down or started up simultaneously, and no ordering
579 takes place.
580 </para></listitem>
581 </varlistentry>
582
583 <varlistentry>
584 <term><varname>OnFailure=</varname></term>
585
586 <listitem><para>A space-separated list of one or more units
587 that are activated when this unit enters the
588 <literal>failed</literal> state.</para></listitem>
589 </varlistentry>
590
591 <varlistentry>
592 <term><varname>PropagatesReloadTo=</varname></term>
593 <term><varname>ReloadPropagatedFrom=</varname></term>
594
595 <listitem><para>A space-separated list of one or more units
596 where reload requests on this unit will be propagated to, or
597 reload requests on the other unit will be propagated to this
598 unit, respectively. Issuing a reload request on a unit will
599 automatically also enqueue a reload request on all units that
600 the reload request shall be propagated to via these two
601 settings.</para></listitem>
602 </varlistentry>
603
604 <varlistentry>
605 <term><varname>JoinsNamespaceOf=</varname></term>
606
607 <listitem><para>For units that start processes (such as
608 service units), lists one or more other units whose network
609 and/or temporary file namespace to join. This only applies to
610 unit types which support the
611 <varname>PrivateNetwork=</varname> and
612 <varname>PrivateTmp=</varname> directives (see
613 <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
614 for details). If a unit that has this setting set is started,
615 its processes will see the same <filename>/tmp</filename>,
616 <filename>/var/tmp</filename> and network namespace as one
617 listed unit that is started. If multiple listed units are
618 already started, it is not defined which namespace is joined.
619 Note that this setting only has an effect if
620 <varname>PrivateNetwork=</varname> and/or
621 <varname>PrivateTmp=</varname> is enabled for both the unit
622 that joins the namespace and the unit whose namespace is
623 joined.</para></listitem>
624 </varlistentry>
625
626 <varlistentry>
627 <term><varname>RequiresMountsFor=</varname></term>
628
629 <listitem><para>Takes a space-separated list of absolute
630 paths. Automatically adds dependencies of type
631 <varname>Requires=</varname> and <varname>After=</varname> for
632 all mount units required to access the specified path.</para>
633
634 <para>Mount points marked with <option>noauto</option> are not
635 mounted automatically and will be ignored for the purposes of
636 this option. If such a mount should be a requirement for this
637 unit, direct dependencies on the mount units may be added
638 (<varname>Requires=</varname> and <varname>After=</varname> or
639 some other combination). </para></listitem>
640 </varlistentry>
641
642 <varlistentry>
643 <term><varname>OnFailureJobMode=</varname></term>
644
645 <listitem><para>Takes a value of
646 <literal>fail</literal>,
647 <literal>replace</literal>,
648 <literal>replace-irreversibly</literal>,
649 <literal>isolate</literal>,
650 <literal>flush</literal>,
651 <literal>ignore-dependencies</literal> or
652 <literal>ignore-requirements</literal>. Defaults to
653 <literal>replace</literal>. Specifies how the units listed in
654 <varname>OnFailure=</varname> will be enqueued. See
655 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
656 <option>--job-mode=</option> option for details on the
657 possible values. If this is set to <literal>isolate</literal>,
658 only a single unit may be listed in
659 <varname>OnFailure=</varname>..</para></listitem>
660 </varlistentry>
661
662 <varlistentry>
663 <term><varname>IgnoreOnIsolate=</varname></term>
664
665 <listitem><para>Takes a boolean argument. If
666 <option>true</option>, this unit will not be stopped when
667 isolating another unit. Defaults to
668 <option>false</option>.</para></listitem>
669 </varlistentry>
670
671 <varlistentry>
672 <term><varname>StopWhenUnneeded=</varname></term>
673
674 <listitem><para>Takes a boolean argument. If
675 <option>true</option>, this unit will be stopped when it is no
676 longer used. Note that, in order to minimize the work to be
677 executed, systemd will not stop units by default unless they
678 are conflicting with other units, or the user explicitly
679 requested their shut down. If this option is set, a unit will
680 be automatically cleaned up if no other active unit requires
681 it. Defaults to <option>false</option>.</para></listitem>
682 </varlistentry>
683
684 <varlistentry>
685 <term><varname>RefuseManualStart=</varname></term>
686 <term><varname>RefuseManualStop=</varname></term>
687
688 <listitem><para>Takes a boolean argument. If
689 <option>true</option>, this unit can only be activated or
690 deactivated indirectly. In this case, explicit start-up or
691 termination requested by the user is denied, however if it is
692 started or stopped as a dependency of another unit, start-up
693 or termination will succeed. This is mostly a safety feature
694 to ensure that the user does not accidentally activate units
695 that are not intended to be activated explicitly, and not
696 accidentally deactivate units that are not intended to be
697 deactivated. These options default to
698 <option>false</option>.</para></listitem>
699 </varlistentry>
700
701 <varlistentry>
702 <term><varname>AllowIsolate=</varname></term>
703
704 <listitem><para>Takes a boolean argument. If
705 <option>true</option>, this unit may be used with the
706 <command>systemctl isolate</command> command. Otherwise, this
707 will be refused. It probably is a good idea to leave this
708 disabled except for target units that shall be used similar to
709 runlevels in SysV init systems, just as a precaution to avoid
710 unusable system states. This option defaults to
711 <option>false</option>.</para></listitem>
712 </varlistentry>
713
714 <varlistentry>
715 <term><varname>DefaultDependencies=</varname></term>
716
717 <listitem><para>Takes a boolean argument. If
718 <option>true</option>, (the default), a few default
719 dependencies will implicitly be created for the unit. The
720 actual dependencies created depend on the unit type. For
721 example, for service units, these dependencies ensure that the
722 service is started only after basic system initialization is
723 completed and is properly terminated on system shutdown. See
724 the respective man pages for details. Generally, only services
725 involved with early boot or late shutdown should set this
726 option to <option>false</option>. It is highly recommended to
727 leave this option enabled for the majority of common units. If
728 set to <option>false</option>, this option does not disable
729 all implicit dependencies, just non-essential
730 ones.</para></listitem>
731 </varlistentry>
732
733 <varlistentry>
734 <term><varname>JobTimeoutSec=</varname></term>
735 <term><varname>JobTimeoutAction=</varname></term>
736 <term><varname>JobTimeoutRebootArgument=</varname></term>
737
738 <listitem><para>When a job for this unit is queued, a time-out may be configured. If this time limit is
739 reached, the job will be cancelled, the unit however will not change state or even enter the
740 <literal>failed</literal> mode. This value defaults to <literal>infinity</literal> (job timeouts disabled),
741 except for device units. NB: this timeout is independent from any unit-specific timeout (for example, the
742 timeout set with <varname>TimeoutStartSec=</varname> in service units) as the job timeout has no effect on the
743 unit itself, only on the job that might be pending for it. Or in other words: unit-specific timeouts are useful
744 to abort unit state changes, and revert them. The job timeout set with this option however is useful to abort
745 only the job waiting for the unit state to change.</para>
746
747 <para><varname>JobTimeoutAction=</varname>
748 optionally configures an additional
749 action to take when the time-out is
750 hit. It takes the same values as the
751 per-service
752 <varname>StartLimitAction=</varname>
753 setting, see
754 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
755 for details. Defaults to
756 <option>none</option>. <varname>JobTimeoutRebootArgument=</varname>
757 configures an optional reboot string
758 to pass to the
759 <citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry>
760 system call.</para></listitem>
761 </varlistentry>
762
763 <varlistentry>
764 <term><varname>StartLimitIntervalSec=</varname></term>
765 <term><varname>StartLimitBurst=</varname></term>
766
767 <listitem><para>Configure unit start rate limiting. By default, units which are started more than 5 times
768 within 10 seconds are not permitted to start any more times until the 10 second interval ends. With these two
769 options, this rate limiting may be modified. Use <varname>StartLimitIntervalSec=</varname> to configure the
770 checking interval (defaults to <varname>DefaultStartLimitIntervalSec=</varname> in manager configuration file,
771 set to 0 to disable any kind of rate limiting). Use <varname>StartLimitBurst=</varname> to configure how many
772 starts per interval are allowed (defaults to <varname>DefaultStartLimitBurst=</varname> in manager
773 configuration file). These configuration options are particularly useful in conjunction with the service
774 setting <varname>Restart=</varname> (see
775 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>); however,
776 they apply to all kinds of starts (including manual), not just those triggered by the
777 <varname>Restart=</varname> logic. Note that units which are configured for <varname>Restart=</varname> and
778 which reach the start limit are not attempted to be restarted anymore; however, they may still be restarted
779 manually at a later point, from which point on, the restart logic is again activated. Note that
780 <command>systemctl reset-failed</command> will cause the restart rate counter for a service to be flushed,
781 which is useful if the administrator wants to manually start a unit and the start limit interferes with
782 that. Note that this rate-limiting is enforced after any unit condition checks are executed, and hence unit
783 activations with failing conditions are not counted by this rate limiting. Slice, target, device and scope
784 units do not enforce this setting, as they are unit types whose activation may either never fail, or may
785 succeed only a single time.</para></listitem>
786 </varlistentry>
787
788 <varlistentry>
789 <term><varname>StartLimitAction=</varname></term>
790
791 <listitem><para>Configure the action to take if the rate limit configured with
792 <varname>StartLimitIntervalSec=</varname> and <varname>StartLimitBurst=</varname> is hit. Takes one of
793 <option>none</option>, <option>reboot</option>, <option>reboot-force</option>,
794 <option>reboot-immediate</option>, <option>poweroff</option>, <option>poweroff-force</option> or
795 <option>poweroff-immediate</option>. If <option>none</option> is set, hitting the rate limit will trigger no
796 action besides that the start will not be permitted. <option>reboot</option> causes a reboot following the
797 normal shutdown procedure (i.e. equivalent to <command>systemctl reboot</command>).
798 <option>reboot-force</option> causes a forced reboot which will terminate all processes forcibly but should
799 cause no dirty file systems on reboot (i.e. equivalent to <command>systemctl reboot -f</command>) and
800 <option>reboot-immediate</option> causes immediate execution of the
801 <citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry> system call, which
802 might result in data loss. Similarly, <option>poweroff</option>, <option>poweroff-force</option>,
803 <option>poweroff-immediate</option> have the effect of powering down the system with similar
804 semantics. Defaults to <option>none</option>.</para></listitem>
805 </varlistentry>
806
807 <varlistentry>
808 <term><varname>RebootArgument=</varname></term>
809 <listitem><para>Configure the optional argument for the
810 <citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry> system call if
811 <varname>StartLimitAction=</varname> or a service's <varname>FailureAction=</varname> is a reboot action. This
812 works just like the optional argument to <command>systemctl reboot</command> command.</para></listitem>
813 </varlistentry>
814
815 <varlistentry>
816 <term><varname>ConditionArchitecture=</varname></term>
817 <term><varname>ConditionVirtualization=</varname></term>
818 <term><varname>ConditionHost=</varname></term>
819 <term><varname>ConditionKernelCommandLine=</varname></term>
820 <term><varname>ConditionSecurity=</varname></term>
821 <term><varname>ConditionCapability=</varname></term>
822 <term><varname>ConditionACPower=</varname></term>
823 <term><varname>ConditionNeedsUpdate=</varname></term>
824 <term><varname>ConditionFirstBoot=</varname></term>
825 <term><varname>ConditionPathExists=</varname></term>
826 <term><varname>ConditionPathExistsGlob=</varname></term>
827 <term><varname>ConditionPathIsDirectory=</varname></term>
828 <term><varname>ConditionPathIsSymbolicLink=</varname></term>
829 <term><varname>ConditionPathIsMountPoint=</varname></term>
830 <term><varname>ConditionPathIsReadWrite=</varname></term>
831 <term><varname>ConditionDirectoryNotEmpty=</varname></term>
832 <term><varname>ConditionFileNotEmpty=</varname></term>
833 <term><varname>ConditionFileIsExecutable=</varname></term>
834
835 <!-- We do not document ConditionNull=
836 here, as it is not particularly
837 useful and probably just
838 confusing. -->
839
840 <listitem><para>Before starting a unit, verify that the specified condition is true. If it is not true, the
841 starting of the unit will be (mostly silently) skipped, however all ordering dependencies of it are still
842 respected. A failing condition will not result in the unit being moved into a failure state. The condition is
843 checked at the time the queued start job is to be executed. Use condition expressions in order to silently skip
844 units that do not apply to the local running system, for example because the kernel or runtime environment
845 doesn't require its functionality. Use the various <varname>AssertArchitecture=</varname>,
846 <varname>AssertVirtualization=</varname>, … options for a similar mechanism that puts the unit in a failure
847 state and logs about the failed check (see below).</para>
848
849 <para><varname>ConditionArchitecture=</varname> may be used to
850 check whether the system is running on a specific
851 architecture. Takes one of
852 <varname>x86</varname>,
853 <varname>x86-64</varname>,
854 <varname>ppc</varname>,
855 <varname>ppc-le</varname>,
856 <varname>ppc64</varname>,
857 <varname>ppc64-le</varname>,
858 <varname>ia64</varname>,
859 <varname>parisc</varname>,
860 <varname>parisc64</varname>,
861 <varname>s390</varname>,
862 <varname>s390x</varname>,
863 <varname>sparc</varname>,
864 <varname>sparc64</varname>,
865 <varname>mips</varname>,
866 <varname>mips-le</varname>,
867 <varname>mips64</varname>,
868 <varname>mips64-le</varname>,
869 <varname>alpha</varname>,
870 <varname>arm</varname>,
871 <varname>arm-be</varname>,
872 <varname>arm64</varname>,
873 <varname>arm64-be</varname>,
874 <varname>sh</varname>,
875 <varname>sh64</varname>,
876 <varname>m86k</varname>,
877 <varname>tilegx</varname>,
878 <varname>cris</varname> to test
879 against a specific architecture. The architecture is
880 determined from the information returned by
881 <citerefentry project='man-pages'><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry>
882 and is thus subject to
883 <citerefentry><refentrytitle>personality</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
884 Note that a <varname>Personality=</varname> setting in the
885 same unit file has no effect on this condition. A special
886 architecture name <varname>native</varname> is mapped to the
887 architecture the system manager itself is compiled for. The
888 test may be negated by prepending an exclamation mark.</para>
889
890 <para><varname>ConditionVirtualization=</varname> may be used
891 to check whether the system is executed in a virtualized
892 environment and optionally test whether it is a specific
893 implementation. Takes either boolean value to check if being
894 executed in any virtualized environment, or one of
895 <varname>vm</varname> and
896 <varname>container</varname> to test against a generic type of
897 virtualization solution, or one of
898 <varname>qemu</varname>,
899 <varname>kvm</varname>,
900 <varname>zvm</varname>,
901 <varname>vmware</varname>,
902 <varname>microsoft</varname>,
903 <varname>oracle</varname>,
904 <varname>xen</varname>,
905 <varname>bochs</varname>,
906 <varname>uml</varname>,
907 <varname>openvz</varname>,
908 <varname>lxc</varname>,
909 <varname>lxc-libvirt</varname>,
910 <varname>systemd-nspawn</varname>,
911 <varname>docker</varname>,
912 <varname>rkt</varname> to test
913 against a specific implementation. See
914 <citerefentry><refentrytitle>systemd-detect-virt</refentrytitle><manvolnum>1</manvolnum></citerefentry>
915 for a full list of known virtualization technologies and their
916 identifiers. If multiple virtualization technologies are
917 nested, only the innermost is considered. The test may be
918 negated by prepending an exclamation mark.</para>
919
920 <para><varname>ConditionHost=</varname> may be used to match
921 against the hostname or machine ID of the host. This either
922 takes a hostname string (optionally with shell style globs)
923 which is tested against the locally set hostname as returned
924 by
925 <citerefentry><refentrytitle>gethostname</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
926 or a machine ID formatted as string (see
927 <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
928 The test may be negated by prepending an exclamation
929 mark.</para>
930
931 <para><varname>ConditionKernelCommandLine=</varname> may be
932 used to check whether a specific kernel command line option is
933 set (or if prefixed with the exclamation mark unset). The
934 argument must either be a single word, or an assignment (i.e.
935 two words, separated <literal>=</literal>). In the former case
936 the kernel command line is searched for the word appearing as
937 is, or as left hand side of an assignment. In the latter case,
938 the exact assignment is looked for with right and left hand
939 side matching.</para>
940
941 <para><varname>ConditionSecurity=</varname> may be used to
942 check whether the given security module is enabled on the
943 system. Currently, the recognized values are
944 <varname>selinux</varname>,
945 <varname>apparmor</varname>,
946 <varname>ima</varname>,
947 <varname>smack</varname> and
948 <varname>audit</varname>. The test may be negated by
949 prepending an exclamation mark.</para>
950
951 <para><varname>ConditionCapability=</varname> may be used to
952 check whether the given capability exists in the capability
953 bounding set of the service manager (i.e. this does not check
954 whether capability is actually available in the permitted or
955 effective sets, see
956 <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
957 for details). Pass a capability name such as
958 <literal>CAP_MKNOD</literal>, possibly prefixed with an
959 exclamation mark to negate the check.</para>
960
961 <para><varname>ConditionACPower=</varname> may be used to
962 check whether the system has AC power, or is exclusively
963 battery powered at the time of activation of the unit. This
964 takes a boolean argument. If set to <varname>true</varname>,
965 the condition will hold only if at least one AC connector of
966 the system is connected to a power source, or if no AC
967 connectors are known. Conversely, if set to
968 <varname>false</varname>, the condition will hold only if
969 there is at least one AC connector known and all AC connectors
970 are disconnected from a power source.</para>
971
972 <para><varname>ConditionNeedsUpdate=</varname> takes one of
973 <filename>/var</filename> or <filename>/etc</filename> as
974 argument, possibly prefixed with a <literal>!</literal> (for
975 inverting the condition). This condition may be used to
976 conditionalize units on whether the specified directory
977 requires an update because <filename>/usr</filename>'s
978 modification time is newer than the stamp file
979 <filename>.updated</filename> in the specified directory. This
980 is useful to implement offline updates of the vendor operating
981 system resources in <filename>/usr</filename> that require
982 updating of <filename>/etc</filename> or
983 <filename>/var</filename> on the next following boot. Units
984 making use of this condition should order themselves before
985 <citerefentry><refentrytitle>systemd-update-done.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
986 to make sure they run before the stamp file's modification
987 time gets reset indicating a completed update.</para>
988
989 <para><varname>ConditionFirstBoot=</varname> takes a boolean
990 argument. This condition may be used to conditionalize units
991 on whether the system is booting up with an unpopulated
992 <filename>/etc</filename> directory. This may be used to
993 populate <filename>/etc</filename> on the first boot after
994 factory reset, or when a new system instances boots up for the
995 first time.</para>
996
997 <para>With <varname>ConditionPathExists=</varname> a file
998 existence condition is checked before a unit is started. If
999 the specified absolute path name does not exist, the condition
1000 will fail. If the absolute path name passed to
1001 <varname>ConditionPathExists=</varname> is prefixed with an
1002 exclamation mark (<literal>!</literal>), the test is negated,
1003 and the unit is only started if the path does not
1004 exist.</para>
1005
1006 <para><varname>ConditionPathExistsGlob=</varname> is similar
1007 to <varname>ConditionPathExists=</varname>, but checks for the
1008 existence of at least one file or directory matching the
1009 specified globbing pattern.</para>
1010
1011 <para><varname>ConditionPathIsDirectory=</varname> is similar
1012 to <varname>ConditionPathExists=</varname> but verifies
1013 whether a certain path exists and is a directory.</para>
1014
1015 <para><varname>ConditionPathIsSymbolicLink=</varname> is
1016 similar to <varname>ConditionPathExists=</varname> but
1017 verifies whether a certain path exists and is a symbolic
1018 link.</para>
1019
1020 <para><varname>ConditionPathIsMountPoint=</varname> is similar
1021 to <varname>ConditionPathExists=</varname> but verifies
1022 whether a certain path exists and is a mount point.</para>
1023
1024 <para><varname>ConditionPathIsReadWrite=</varname> is similar
1025 to <varname>ConditionPathExists=</varname> but verifies
1026 whether the underlying file system is readable and writable
1027 (i.e. not mounted read-only).</para>
1028
1029 <para><varname>ConditionDirectoryNotEmpty=</varname> is
1030 similar to <varname>ConditionPathExists=</varname> but
1031 verifies whether a certain path exists and is a non-empty
1032 directory.</para>
1033
1034 <para><varname>ConditionFileNotEmpty=</varname> is similar to
1035 <varname>ConditionPathExists=</varname> but verifies whether a
1036 certain path exists and refers to a regular file with a
1037 non-zero size.</para>
1038
1039 <para><varname>ConditionFileIsExecutable=</varname> is similar
1040 to <varname>ConditionPathExists=</varname> but verifies
1041 whether a certain path exists, is a regular file and marked
1042 executable.</para>
1043
1044 <para>If multiple conditions are specified, the unit will be
1045 executed if all of them apply (i.e. a logical AND is applied).
1046 Condition checks can be prefixed with a pipe symbol (|) in
1047 which case a condition becomes a triggering condition. If at
1048 least one triggering condition is defined for a unit, then the
1049 unit will be executed if at least one of the triggering
1050 conditions apply and all of the non-triggering conditions. If
1051 you prefix an argument with the pipe symbol and an exclamation
1052 mark, the pipe symbol must be passed first, the exclamation
1053 second. Except for
1054 <varname>ConditionPathIsSymbolicLink=</varname>, all path
1055 checks follow symlinks. If any of these options is assigned
1056 the empty string, the list of conditions is reset completely,
1057 all previous condition settings (of any kind) will have no
1058 effect.</para></listitem>
1059 </varlistentry>
1060
1061 <varlistentry>
1062 <term><varname>AssertArchitecture=</varname></term>
1063 <term><varname>AssertVirtualization=</varname></term>
1064 <term><varname>AssertHost=</varname></term>
1065 <term><varname>AssertKernelCommandLine=</varname></term>
1066 <term><varname>AssertSecurity=</varname></term>
1067 <term><varname>AssertCapability=</varname></term>
1068 <term><varname>AssertACPower=</varname></term>
1069 <term><varname>AssertNeedsUpdate=</varname></term>
1070 <term><varname>AssertFirstBoot=</varname></term>
1071 <term><varname>AssertPathExists=</varname></term>
1072 <term><varname>AssertPathExistsGlob=</varname></term>
1073 <term><varname>AssertPathIsDirectory=</varname></term>
1074 <term><varname>AssertPathIsSymbolicLink=</varname></term>
1075 <term><varname>AssertPathIsMountPoint=</varname></term>
1076 <term><varname>AssertPathIsReadWrite=</varname></term>
1077 <term><varname>AssertDirectoryNotEmpty=</varname></term>
1078 <term><varname>AssertFileNotEmpty=</varname></term>
1079 <term><varname>AssertFileIsExecutable=</varname></term>
1080
1081 <listitem><para>Similar to the <varname>ConditionArchitecture=</varname>,
1082 <varname>ConditionVirtualization=</varname>, …, condition settings described above, these settings add
1083 assertion checks to the start-up of the unit. However, unlike the conditions settings, any assertion setting
1084 that is not met results in failure of the start job (which means this is logged loudly). Use assertion
1085 expressions for units that cannot operate when specific requirements are not met, and when this is something
1086 the administrator or user should look into.</para></listitem>
1087 </varlistentry>
1088
1089 <varlistentry>
1090 <term><varname>SourcePath=</varname></term>
1091 <listitem><para>A path to a configuration file this unit has
1092 been generated from. This is primarily useful for
1093 implementation of generator tools that convert configuration
1094 from an external configuration file format into native unit
1095 files. This functionality should not be used in normal
1096 units.</para></listitem>
1097 </varlistentry>
1098
1099 </variablelist>
1100
1101 </refsect1>
1102
1103 <refsect1>
1104 <title>[Install] Section Options</title>
1105
1106 <para>Unit files may include an <literal>[Install]</literal> section, which carries installation information for
1107 the unit. This section is not interpreted by
1108 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> during runtime; it is
1109 used by the <command>enable</command> and <command>disable</command> commands of the
1110 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> tool during
1111 installation of a unit. Note that settings in the <literal>[Install]</literal> section may not appear in
1112 <filename>.d/*.conf</filename> unit file drop-ins (see above).</para>
1113
1114 <variablelist class='unit-directives'>
1115 <varlistentry>
1116 <term><varname>Alias=</varname></term>
1117
1118 <listitem><para>A space-separated list of additional names this unit shall be installed under. The names listed
1119 here must have the same suffix (i.e. type) as the unit file name. This option may be specified more than once,
1120 in which case all listed names are used. At installation time, <command>systemctl enable</command> will create
1121 symlinks from these names to the unit filename. Note that not all unit types support such alias names, and this
1122 setting is not supported for them. Specifically, mount, slice, swap, and automount units do not support
1123 aliasing.</para></listitem>
1124 </varlistentry>
1125
1126 <varlistentry>
1127 <term><varname>WantedBy=</varname></term>
1128 <term><varname>RequiredBy=</varname></term>
1129
1130 <listitem><para>This option may be used more than once, or a
1131 space-separated list of unit names may be given. A symbolic
1132 link is created in the <filename>.wants/</filename> or
1133 <filename>.requires/</filename> directory of each of the
1134 listed units when this unit is installed by <command>systemctl
1135 enable</command>. This has the effect that a dependency of
1136 type <varname>Wants=</varname> or <varname>Requires=</varname>
1137 is added from the listed unit to the current unit. The primary
1138 result is that the current unit will be started when the
1139 listed unit is started. See the description of
1140 <varname>Wants=</varname> and <varname>Requires=</varname> in
1141 the [Unit] section for details.</para>
1142
1143 <para><command>WantedBy=foo.service</command> in a service
1144 <filename>bar.service</filename> is mostly equivalent to
1145 <command>Alias=foo.service.wants/bar.service</command> in the
1146 same file. In case of template units, <command>systemctl
1147 enable</command> must be called with an instance name, and
1148 this instance will be added to the
1149 <filename>.wants/</filename> or
1150 <filename>.requires/</filename> list of the listed unit. E.g.
1151 <command>WantedBy=getty.target</command> in a service
1152 <filename>getty@.service</filename> will result in
1153 <command>systemctl enable getty@tty2.service</command>
1154 creating a
1155 <filename>getty.target.wants/getty@tty2.service</filename>
1156 link to <filename>getty@.service</filename>.
1157 </para></listitem>
1158 </varlistentry>
1159
1160 <varlistentry>
1161 <term><varname>Also=</varname></term>
1162
1163 <listitem><para>Additional units to install/deinstall when
1164 this unit is installed/deinstalled. If the user requests
1165 installation/deinstallation of a unit with this option
1166 configured, <command>systemctl enable</command> and
1167 <command>systemctl disable</command> will automatically
1168 install/uninstall units listed in this option as well.</para>
1169
1170 <para>This option may be used more than once, or a
1171 space-separated list of unit names may be
1172 given.</para></listitem>
1173 </varlistentry>
1174
1175 <varlistentry>
1176 <term><varname>DefaultInstance=</varname></term>
1177
1178 <listitem><para>In template unit files, this specifies for
1179 which instance the unit shall be enabled if the template is
1180 enabled without any explicitly set instance. This option has
1181 no effect in non-template unit files. The specified string
1182 must be usable as instance identifier.</para></listitem>
1183 </varlistentry>
1184 </variablelist>
1185
1186 <para>The following specifiers are interpreted in the Install
1187 section: %n, %N, %p, %i, %U, %u, %m, %H, %b, %v. For their meaning
1188 see the next section.
1189 </para>
1190 </refsect1>
1191
1192 <refsect1>
1193 <title>Specifiers</title>
1194
1195 <para>Many settings resolve specifiers which may be used to write
1196 generic unit files referring to runtime or unit parameters that
1197 are replaced when the unit files are loaded. The following
1198 specifiers are understood:</para>
1199
1200 <table>
1201 <title>Specifiers available in unit files</title>
1202 <tgroup cols='3' align='left' colsep='1' rowsep='1'>
1203 <colspec colname="spec" />
1204 <colspec colname="mean" />
1205 <colspec colname="detail" />
1206 <thead>
1207 <row>
1208 <entry>Specifier</entry>
1209 <entry>Meaning</entry>
1210 <entry>Details</entry>
1211 </row>
1212 </thead>
1213 <tbody>
1214 <row>
1215 <entry><literal>%n</literal></entry>
1216 <entry>Full unit name</entry>
1217 <entry></entry>
1218 </row>
1219 <row>
1220 <entry><literal>%N</literal></entry>
1221 <entry>Unescaped full unit name</entry>
1222 <entry>Same as <literal>%n</literal>, but with escaping undone</entry>
1223 </row>
1224 <row>
1225 <entry><literal>%p</literal></entry>
1226 <entry>Prefix name</entry>
1227 <entry>For instantiated units, this refers to the string before the <literal>@</literal> character of the unit name. For non-instantiated units, this refers to the name of the unit with the type suffix removed.</entry>
1228 </row>
1229 <row>
1230 <entry><literal>%P</literal></entry>
1231 <entry>Unescaped prefix name</entry>
1232 <entry>Same as <literal>%p</literal>, but with escaping undone</entry>
1233 </row>
1234 <row>
1235 <entry><literal>%i</literal></entry>
1236 <entry>Instance name</entry>
1237 <entry>For instantiated units: this is the string between the <literal>@</literal> character and the suffix of the unit name.</entry>
1238 </row>
1239 <row>
1240 <entry><literal>%I</literal></entry>
1241 <entry>Unescaped instance name</entry>
1242 <entry>Same as <literal>%i</literal>, but with escaping undone</entry>
1243 </row>
1244 <row>
1245 <entry><literal>%f</literal></entry>
1246 <entry>Unescaped filename</entry>
1247 <entry>This is either the unescaped instance name (if applicable) with <filename>/</filename> prepended (if applicable), or the unescaped prefix name prepended with <filename>/</filename>.</entry>
1248 </row>
1249 <row>
1250 <entry><literal>%c</literal></entry>
1251 <entry>Control group path of the unit</entry>
1252 <entry>This path does not include the <filename>/sys/fs/cgroup/systemd/</filename> prefix.</entry>
1253 </row>
1254 <row>
1255 <entry><literal>%r</literal></entry>
1256 <entry>Control group path of the slice the unit is placed in</entry>
1257 <entry>This usually maps to the parent cgroup path of <literal>%c</literal>.</entry>
1258 </row>
1259 <row>
1260 <entry><literal>%R</literal></entry>
1261 <entry>Root control group path below which slices and units are placed</entry>
1262 <entry>For system instances, this resolves to <filename>/</filename>, except in containers, where this maps to the container's root control group path.</entry>
1263 </row>
1264 <row>
1265 <entry><literal>%t</literal></entry>
1266 <entry>Runtime directory</entry>
1267 <entry>This is either <filename>/run</filename> (for the system manager) or the path <literal>$XDG_RUNTIME_DIR</literal> resolves to (for user managers).</entry>
1268 </row>
1269 <row>
1270 <entry><literal>%u</literal></entry>
1271 <entry>User name</entry>
1272 <entry>This is the name of the user running the service manager instance. In case of the system manager this resolves to <literal>root</literal>.</entry>
1273 </row>
1274 <row>
1275 <entry><literal>%U</literal></entry>
1276 <entry>User UID</entry>
1277 <entry>This is the numeric UID of the user running the service manager instance. In case of the system manager this resolves to <literal>0</literal>.</entry>
1278 </row>
1279 <row>
1280 <entry><literal>%h</literal></entry>
1281 <entry>User home directory</entry>
1282 <entry>This is the home directory of the user running the service manager instance. In case of the system manager this resolves to <literal>/root</literal>.</entry>
1283 </row>
1284 <row>
1285 <entry><literal>%s</literal></entry>
1286 <entry>User shell</entry>
1287 <entry>This is the shell of the user running the service manager instance. In case of the system manager this resolves to <literal>/bin/sh</literal>.</entry>
1288 </row>
1289 <row>
1290 <entry><literal>%m</literal></entry>
1291 <entry>Machine ID</entry>
1292 <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>
1293 </row>
1294 <row>
1295 <entry><literal>%b</literal></entry>
1296 <entry>Boot ID</entry>
1297 <entry>The boot ID of the running system, formatted as string. See <citerefentry><refentrytitle>random</refentrytitle><manvolnum>4</manvolnum></citerefentry> for more information.</entry>
1298 </row>
1299 <row>
1300 <entry><literal>%H</literal></entry>
1301 <entry>Host name</entry>
1302 <entry>The hostname of the running system at the point in time the unit configuration is loaded.</entry>
1303 </row>
1304 <row>
1305 <entry><literal>%v</literal></entry>
1306 <entry>Kernel release</entry>
1307 <entry>Identical to <command>uname -r</command> output</entry>
1308 </row>
1309 <row>
1310 <entry><literal>%%</literal></entry>
1311 <entry>Single percent sign</entry>
1312 <entry>Use <literal>%%</literal> in place of <literal>%</literal> to specify a single percent sign.</entry>
1313 </row>
1314 </tbody>
1315 </tgroup>
1316 </table>
1317
1318 <para>Please note that specifiers <literal>%U</literal>,
1319 <literal>%h</literal>, <literal>%s</literal> are mostly useless
1320 when systemd is running in system mode. PID 1 cannot query the
1321 user account database for information, so the specifiers only work
1322 as shortcuts for things which are already specified in a different
1323 way in the unit file. They are fully functional when systemd is
1324 running in <option>--user</option> mode.</para>
1325 </refsect1>
1326
1327 <refsect1>
1328 <title>Examples</title>
1329
1330 <example>
1331 <title>Allowing units to be enabled</title>
1332
1333 <para>The following snippet (highlighted) allows a unit (e.g.
1334 <filename>foo.service</filename>) to be enabled via
1335 <command>systemctl enable</command>:</para>
1336
1337 <programlisting>[Unit]
1338 Description=Foo
1339
1340 [Service]
1341 ExecStart=/usr/sbin/foo-daemon
1342
1343 <emphasis>[Install]</emphasis>
1344 <emphasis>WantedBy=multi-user.target</emphasis></programlisting>
1345
1346 <para>After running <command>systemctl enable</command>, a
1347 symlink
1348 <filename>/etc/systemd/system/multi-user.target.wants/foo.service</filename>
1349 linking to the actual unit will be created. It tells systemd to
1350 pull in the unit when starting
1351 <filename>multi-user.target</filename>. The inverse
1352 <command>systemctl disable</command> will remove that symlink
1353 again.</para>
1354 </example>
1355
1356 <example>
1357 <title>Overriding vendor settings</title>
1358
1359 <para>There are two methods of overriding vendor settings in
1360 unit files: copying the unit file from
1361 <filename>/usr/lib/systemd/system</filename> to
1362 <filename>/etc/systemd/system</filename> and modifying the
1363 chosen settings. Alternatively, one can create a directory named
1364 <filename><replaceable>unit</replaceable>.d/</filename> within
1365 <filename>/etc/systemd/system</filename> and place a drop-in
1366 file <filename><replaceable>name</replaceable>.conf</filename>
1367 there that only changes the specific settings one is interested
1368 in. Note that multiple such drop-in files are read if
1369 present.</para>
1370
1371 <para>The advantage of the first method is that one easily
1372 overrides the complete unit, the vendor unit is not parsed at
1373 all anymore. It has the disadvantage that improvements to the
1374 unit file by the vendor are not automatically incorporated on
1375 updates.</para>
1376
1377 <para>The advantage of the second method is that one only
1378 overrides the settings one specifically wants, where updates to
1379 the unit by the vendor automatically apply. This has the
1380 disadvantage that some future updates by the vendor might be
1381 incompatible with the local changes.</para>
1382
1383 <para>Note that for drop-in files, if one wants to remove
1384 entries from a setting that is parsed as a list (and is not a
1385 dependency), such as <varname>ConditionPathExists=</varname> (or
1386 e.g. <varname>ExecStart=</varname> in service units), one needs
1387 to first clear the list before re-adding all entries except the
1388 one that is to be removed. See below for an example.</para>
1389
1390 <para>This also applies for user instances of systemd, but with
1391 different locations for the unit files. See the section on unit
1392 load paths for further details.</para>
1393
1394 <para>Suppose there is a vendor-supplied unit
1395 <filename>/usr/lib/systemd/system/httpd.service</filename> with
1396 the following contents:</para>
1397
1398 <programlisting>[Unit]
1399 Description=Some HTTP server
1400 After=remote-fs.target sqldb.service
1401 Requires=sqldb.service
1402 AssertPathExists=/srv/webserver
1403
1404 [Service]
1405 Type=notify
1406 ExecStart=/usr/sbin/some-fancy-httpd-server
1407 Nice=5
1408
1409 [Install]
1410 WantedBy=multi-user.target</programlisting>
1411
1412 <para>Now one wants to change some settings as an administrator:
1413 firstly, in the local setup, <filename>/srv/webserver</filename>
1414 might not exist, because the HTTP server is configured to use
1415 <filename>/srv/www</filename> instead. Secondly, the local
1416 configuration makes the HTTP server also depend on a memory
1417 cache service, <filename>memcached.service</filename>, that
1418 should be pulled in (<varname>Requires=</varname>) and also be
1419 ordered appropriately (<varname>After=</varname>). Thirdly, in
1420 order to harden the service a bit more, the administrator would
1421 like to set the <varname>PrivateTmp=</varname> setting (see
1422 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
1423 for details). And lastly, the administrator would like to reset
1424 the niceness of the service to its default value of 0.</para>
1425
1426 <para>The first possibility is to copy the unit file to
1427 <filename>/etc/systemd/system/httpd.service</filename> and
1428 change the chosen settings:</para>
1429
1430 <programlisting>[Unit]
1431 Description=Some HTTP server
1432 After=remote-fs.target sqldb.service <emphasis>memcached.service</emphasis>
1433 Requires=sqldb.service <emphasis>memcached.service</emphasis>
1434 AssertPathExists=<emphasis>/srv/www</emphasis>
1435
1436 [Service]
1437 Type=notify
1438 ExecStart=/usr/sbin/some-fancy-httpd-server
1439 <emphasis>Nice=0</emphasis>
1440 <emphasis>PrivateTmp=yes</emphasis>
1441
1442 [Install]
1443 WantedBy=multi-user.target</programlisting>
1444
1445 <para>Alternatively, the administrator could create a drop-in
1446 file
1447 <filename>/etc/systemd/system/httpd.service.d/local.conf</filename>
1448 with the following contents:</para>
1449
1450 <programlisting>[Unit]
1451 After=memcached.service
1452 Requires=memcached.service
1453 # Reset all assertions and then re-add the condition we want
1454 AssertPathExists=
1455 AssertPathExists=/srv/www
1456
1457 [Service]
1458 Nice=0
1459 PrivateTmp=yes</programlisting>
1460
1461 <para>Note that dependencies (<varname>After=</varname>, etc.)
1462 cannot be reset to an empty list, so dependencies can only be
1463 added in drop-ins. If you want to remove dependencies, you have
1464 to override the entire unit.</para>
1465
1466 </example>
1467 </refsect1>
1468
1469 <refsect1>
1470 <title>See Also</title>
1471 <para>
1472 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
1473 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
1474 <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
1475 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1476 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1477 <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1478 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1479 <citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1480 <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1481 <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1482 <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1483 <citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1484 <citerefentry><refentrytitle>systemd.scope</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1485 <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1486 <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
1487 <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
1488 <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
1489 <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
1490 <citerefentry project='man-pages'><refentrytitle>uname</refentrytitle><manvolnum>1</manvolnum></citerefentry>
1491 </para>
1492 </refsect1>
1493
1494 </refentry>