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