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