]> git.ipfire.org Git - thirdparty/systemd.git/blob - man/systemd.unit.xml
man: fix --h vs. -h typos
[thirdparty/systemd.git] / man / systemd.unit.xml
1 <?xml version='1.0'?> <!--*-nxml-*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4
5 <!--
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22 -->
23
24 <refentry id="systemd.unit">
25
26 <refentryinfo>
27 <title>systemd.unit</title>
28 <productname>systemd</productname>
29
30 <authorgroup>
31 <author>
32 <contrib>Developer</contrib>
33 <firstname>Lennart</firstname>
34 <surname>Poettering</surname>
35 <email>lennart@poettering.net</email>
36 </author>
37 </authorgroup>
38 </refentryinfo>
39
40 <refmeta>
41 <refentrytitle>systemd.unit</refentrytitle>
42 <manvolnum>5</manvolnum>
43 </refmeta>
44
45 <refnamediv>
46 <refname>systemd.unit</refname>
47 <refpurpose>systemd unit configuration files</refpurpose>
48 </refnamediv>
49
50 <refsynopsisdiv>
51 <para><filename>systemd.service</filename>,
52 <filename>systemd.socket</filename>,
53 <filename>systemd.device</filename>,
54 <filename>systemd.mount</filename>,
55 <filename>systemd.automount</filename>,
56 <filename>systemd.swap</filename>,
57 <filename>systemd.target</filename>,
58 <filename>systemd.path</filename>,
59 <filename>systemd.timer</filename>,
60 <filename>systemd.snapshot</filename></para>
61 </refsynopsisdiv>
62
63 <refsect1>
64 <title>Description</title>
65
66 <para>A unit configuration file encodes information
67 about a service, a socket, a device, a mount point, an
68 automount point, a swap file or partition, a start-up
69 target, a file system path or a timer controlled and
70 supervised by
71 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>. The
72 syntax is inspired by <ulink
73 url="http://standards.freedesktop.org/desktop-entry-spec/latest/">XDG
74 Desktop Entry Specification</ulink> <filename>.desktop</filename> files, which are in turn
75 inspired by Microsoft Windows
76 <filename>.ini</filename> files.</para>
77
78 <para>This man pages lists the common configuration
79 options of all the unit types. These options need to
80 be configured in the [Unit] resp. [Install]
81 section of the unit files.</para>
82
83 <para>In addition to the generic [Unit] and [Install]
84 sections described here, each unit should have a
85 type-specific section, e.g. [Service] for a service
86 unit. See the respective man pages for more
87 information.</para>
88
89 <para>Unit files may contain additional options on top
90 of those listed here. If systemd encounters an unknown
91 option it will write a warning log message but
92 continue loading the unit. If an option is prefixed
93 with <option>X-</option> it is ignored completely by
94 systemd. Applications may use this to include
95 additional information in the unit files.</para>
96
97 <para>Boolean arguments used in unit files can be
98 written in various formats. For positive settings the
99 strings <option>1</option>, <option>yes</option>,
100 <option>true</option> and <option>on</option> are
101 equivalent. For negative settings the strings
102 <option>0</option>, <option>no</option>,
103 <option>false</option> and <option>off</option> are
104 equivalent.</para>
105
106 <para>Time span values encoded in unit files can be
107 written in various formats. A stand-alone number
108 specifies a time in seconds. If suffixed with a time
109 unit, the unit is honored. A concatenation of
110 multiple values with units is supported, in which case
111 the values are added up. Example: "50" refers to 50
112 seconds; "2min 200ms" refers to 2 minutes plus 200
113 milliseconds, i.e. 120200ms. The following time units
114 are understood: s, min, h, d, w, ms, us.</para>
115
116 <para>Empty lines and lines starting with # or ; are
117 ignored. This may be used for commenting. Lines ending
118 in a backslash are concatenated with the following
119 line while reading and the backslash is replaced by a
120 space character. This may be used to wrap long lines.</para>
121
122 <para>If a line starts with <option>.include</option>
123 followed by a file name, the specified file will be
124 parsed at this point. Make sure that the file that is
125 included has the appropriate section headers before
126 any directives.</para>
127
128 <para>Along with a unit file
129 <filename>foo.service</filename> a directory
130 <filename>foo.service.wants/</filename> may exist. All
131 units symlinked from such a directory are implicitly
132 added as dependencies of type
133 <varname>Wanted=</varname> to the unit. This is useful
134 to hook units into the start-up of other units,
135 without having to modify their unit configuration
136 files. For details about the semantics of
137 <varname>Wanted=</varname> see below. The preferred
138 way to create symlinks in the
139 <filename>.wants/</filename> directory of a service is
140 with the <command>enable</command> command of the
141 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
142 tool which reads information from the [Install]
143 section of unit files. (See below.) A similar
144 functionality exists for <varname>Requires=</varname>
145 type dependencies as well, the directory suffix is
146 <filename>.requires/</filename> in this case.</para>
147
148 <para>Note that while systemd offers a flexible
149 dependency system between units it is recommended to
150 use this functionality only sparsely and instead rely
151 on techniques such as bus-based or socket-based
152 activation which makes dependencies implicit, which
153 both results in a simpler and more flexible
154 system.</para>
155
156 <para>Some unit names reflect paths existing in the
157 file system name space. Example: a device unit
158 <filename>dev-sda.device</filename> refers to a device
159 with the device node <filename>/dev/sda</filename> in
160 the file system namespace. If this applies a special
161 way to escape the path name is used, so that the
162 result is usable as part of a file name. Basically,
163 given a path, "/" is replaced by "-", and all
164 unprintable characters and the "-" are replaced by
165 C-style "\x20" escapes. The root directory "/" is
166 encoded as single dash, while otherwise the initial
167 and ending "/" is removed from all paths during
168 transformation. This escaping is reversible.</para>
169
170 <para>Optionally, units may be instantiated from a
171 template file at runtime. This allows creation of
172 multiple units from a single configuration file. If
173 systemd looks for a unit configuration file it will
174 first search for the literal unit name in the
175 filesystem. If that yields no success and the unit
176 name contains an @ character, systemd will look for a
177 unit template that shares the same name but with the
178 instance string (i.e. the part between the @ character
179 and the suffix) removed. Example: if a service
180 <filename>getty@tty3.service</filename> is requested
181 and no file by that name is found, systemd will look
182 for <filename>getty@.service</filename> and
183 instantiate a service from that configuration file if
184 it is found.</para>
185
186 <para>To refer to the instance string from
187 within the configuration file you may use the special
188 <literal>%i</literal> specifier in many of the
189 configuration options. Other specifiers exist, the
190 full list is:</para>
191
192 <table>
193 <title>Specifiers available in unit files</title>
194 <tgroup cols='3' align='left' colsep='1' rowsep='1'>
195 <colspec colname="spec" />
196 <colspec colname="mean" />
197 <colspec colname="detail" />
198 <thead>
199 <row>
200 <entry>Specifier</entry>
201 <entry>Meaning</entry>
202 <entry>Details</entry>
203 </row>
204 </thead>
205 <tbody>
206 <row>
207 <entry><literal>%n</literal></entry>
208 <entry>Full unit name</entry>
209 <entry></entry>
210 </row>
211 <row>
212 <entry><literal>%N</literal></entry>
213 <entry>Unescaped full unit name</entry>
214 <entry></entry>
215 </row>
216 <row>
217 <entry><literal>%p</literal></entry>
218 <entry>Prefix name</entry>
219 <entry>This refers to the string before the @, i.e. "getty" in the example above, where "tty3" is the instance name.</entry>
220 </row>
221 <row>
222 <entry><literal>%P</literal></entry>
223 <entry>Unescaped prefix name</entry>
224 <entry></entry>
225 </row>
226 <row>
227 <entry><literal>%i</literal></entry>
228 <entry>Instance name</entry>
229 <entry>This is the string between the @ character and the suffix.</entry>
230 </row>
231 <row>
232 <entry><literal>%I</literal></entry>
233 <entry>Unescaped instance name</entry>
234 <entry></entry>
235 </row>
236 <row>
237 <entry><literal>%f</literal></entry>
238 <entry>Unescaped file name</entry>
239 <entry>This is either the unescaped instance name (if set) with / prepended (if necessary), or the prefix name similarly prepended with /.</entry>
240 </row>
241 <row>
242 <entry><literal>%c</literal></entry>
243 <entry>Control group path of the unit</entry>
244 <entry></entry>
245 </row>
246 <row>
247 <entry><literal>%r</literal></entry>
248 <entry>Root control group path of systemd</entry>
249 <entry></entry>
250 </row>
251 <row>
252 <entry><literal>%R</literal></entry>
253 <entry>Parent directory of the root control group path of systemd</entry>
254 <entry></entry>
255 </row>
256 <row>
257 <entry><literal>%t</literal></entry>
258 <entry>Runtime socket dir</entry>
259 <entry>This is either /run (for the system manager) or $XDG_RUNTIME_DIR (for user managers).</entry>
260 </row>
261 </tbody>
262 </tgroup>
263 </table>
264
265 <para>If a unit file is empty (i.e. has the file size
266 0) or is symlinked to <filename>/dev/null</filename>
267 its configuration will not be loaded and it appears
268 with a load state of <literal>masked</literal>, and
269 cannot be activated. Use this as an effective way to
270 fully disable a unit, making it impossible to start it
271 even manually.</para>
272
273 <para>The unit file format is covered by the
274 <ulink
275 url="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise">Interface
276 Stability Promise</ulink>.</para>
277 </refsect1>
278
279 <refsect1>
280 <title>Options</title>
281
282 <para>Unit file may include a [Unit] section, which
283 carries generic information about the unit that is not
284 dependent on the type of unit:</para>
285
286 <variablelist>
287
288 <varlistentry>
289 <term><varname>Description=</varname></term>
290 <listitem><para>A free-form string
291 describing the unit. This is intended
292 for use in UIs to show descriptive
293 information along with the unit
294 name.</para></listitem>
295 </varlistentry>
296
297 <varlistentry>
298 <term><varname>Documentation=</varname></term>
299 <listitem><para>A space separated list
300 of URIs referencing documentation for
301 this unit or its
302 configuration. Accepted are only URIs
303 of the types
304 <literal>http://</literal>,
305 <literal>https://</literal>,
306 <literal>file:</literal>,
307 <literal>info:</literal>,
308 <literal>man:</literal>. For more
309 information about the syntax of these
310 URIs see
311 <citerefentry><refentrytitle>uri</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para></listitem>
312 </varlistentry>
313
314 <varlistentry>
315 <term><varname>Requires=</varname></term>
316
317 <listitem><para>Configures requirement
318 dependencies on other units. If this
319 unit gets activated, the units listed
320 here will be activated as well. If one
321 of the other units gets deactivated or
322 its activation fails, this unit will
323 be deactivated. This option may be
324 specified more than once, in which
325 case requirement dependencies for all
326 listed names are created. Note that
327 requirement dependencies do not
328 influence the order in which services
329 are started or stopped. This has to be
330 configured independently with the
331 <varname>After=</varname> or
332 <varname>Before=</varname> options. If
333 a unit
334 <filename>foo.service</filename>
335 requires a unit
336 <filename>bar.service</filename> as
337 configured with
338 <varname>Requires=</varname> and no
339 ordering is configured with
340 <varname>After=</varname> or
341 <varname>Before=</varname>, then both
342 units will be started simultaneously
343 and without any delay between them if
344 <filename>foo.service</filename> is
345 activated. Often it is a better choice
346 to use <varname>Wants=</varname>
347 instead of
348 <varname>Requires=</varname> in order
349 to achieve a system that is more
350 robust when dealing with failing
351 services.</para></listitem>
352 </varlistentry>
353
354 <varlistentry>
355 <term><varname>RequiresOverridable=</varname></term>
356
357 <listitem><para>Similar to
358 <varname>Requires=</varname>.
359 Dependencies listed in
360 <varname>RequiresOverridable=</varname>
361 which cannot be fulfilled or fail to
362 start are ignored if the startup was
363 explicitly requested by the user. If
364 the start-up was pulled in indirectly
365 by some dependency or automatic
366 start-up of units that is not
367 requested by the user this dependency
368 must be fulfilled and otherwise the
369 transaction fails. Hence, this option
370 may be used to configure dependencies
371 that are normally honored unless the
372 user explicitly starts up the unit, in
373 which case whether they failed or not
374 is irrelevant.</para></listitem>
375
376 </varlistentry>
377 <varlistentry>
378 <term><varname>Requisite=</varname></term>
379 <term><varname>RequisiteOverridable=</varname></term>
380
381 <listitem><para>Similar to
382 <varname>Requires=</varname>
383 resp. <varname>RequiresOverridable=</varname>. However,
384 if a unit listed here is not started
385 already it will not be started and the
386 transaction fails
387 immediately.</para></listitem>
388 </varlistentry>
389
390 <varlistentry>
391 <term><varname>Wants=</varname></term>
392
393 <listitem><para>A weaker version of
394 <varname>Requires=</varname>. A unit
395 listed in this option will be started
396 if the configuring unit is. However,
397 if the listed unit fails to start up
398 or cannot be added to the transaction
399 this has no impact on the validity of
400 the transaction as a whole. This is
401 the recommended way to hook start-up
402 of one unit to the start-up of another
403 unit. Note that dependencies of this
404 type may also be configured outside of
405 the unit configuration file by
406 adding a symlink to a
407 <filename>.wants/</filename> directory
408 accompanying the unit file. For
409 details see above.</para></listitem>
410 </varlistentry>
411
412 <varlistentry>
413 <term><varname>BindTo=</varname></term>
414
415 <listitem><para>Configures requirement
416 dependencies, very similar in style to
417 <varname>Requires=</varname>, however
418 in addition to this behaviour it also
419 declares that this unit is stopped
420 when any of the units listed suddenly
421 disappears. Units can suddenly,
422 unexpectedly disappear if a service
423 terminates on its own choice, a device
424 is unplugged or a mount point
425 unmounted without involvement of
426 systemd.</para></listitem>
427 </varlistentry>
428
429 <varlistentry>
430 <term><varname>Conflicts=</varname></term>
431
432 <listitem><para>Configures negative
433 requirement dependencies. If a unit
434 has a
435 <varname>Conflicts=</varname> setting
436 on another unit, starting the former
437 will stop the latter and vice
438 versa. Note that this setting is
439 independent of and orthogonal to the
440 <varname>After=</varname> and
441 <varname>Before=</varname> ordering
442 dependencies.</para>
443
444 <para>If a unit A that conflicts with
445 a unit B is scheduled to be started at
446 the same time as B, the transaction
447 will either fail (in case both are
448 required part of the transaction) or
449 be modified to be fixed (in case one
450 or both jobs are not a required part
451 of the transaction). In the latter
452 case the job that is not the required
453 will be removed, or in case both are
454 not required the unit that conflicts
455 will be started and the unit that is
456 conflicted is
457 stopped.</para></listitem>
458 </varlistentry>
459
460 <varlistentry>
461 <term><varname>Before=</varname></term>
462 <term><varname>After=</varname></term>
463
464 <listitem><para>Configures ordering
465 dependencies between units. If a unit
466 <filename>foo.service</filename>
467 contains a setting
468 <option>Before=bar.service</option>
469 and both units are being started,
470 <filename>bar.service</filename>'s
471 start-up is delayed until
472 <filename>foo.service</filename> is
473 started up. Note that this setting is
474 independent of and orthogonal to the
475 requirement dependencies as configured
476 by <varname>Requires=</varname>. It is
477 a common pattern to include a unit
478 name in both the
479 <varname>After=</varname> and
480 <varname>Requires=</varname> option in
481 which case the unit listed will be
482 started before the unit that is
483 configured with these options. This
484 option may be specified more than
485 once, in which case ordering
486 dependencies for all listed names are
487 created. <varname>After=</varname> is
488 the inverse of
489 <varname>Before=</varname>, i.e. while
490 <varname>After=</varname> ensures that
491 the configured unit is started after
492 the listed unit finished starting up,
493 <varname>Before=</varname> ensures the
494 opposite, i.e. that the configured
495 unit is fully started up before the
496 listed unit is started. Note that when
497 two units with an ordering dependency
498 between them are shut down, the
499 inverse of the start-up order is
500 applied. i.e. if a unit is configured
501 with <varname>After=</varname> on
502 another unit, the former is stopped
503 before the latter if both are shut
504 down. If one unit with an ordering
505 dependency on another unit is shut
506 down while the latter is started up,
507 the shut down is ordered before the
508 start-up regardless whether the
509 ordering dependency is actually of
510 type <varname>After=</varname> or
511 <varname>Before=</varname>. If two
512 units have no ordering dependencies
513 between them they are shut down
514 resp. started up simultaneously, and
515 no ordering takes
516 place. </para></listitem>
517 </varlistentry>
518
519 <varlistentry>
520 <term><varname>OnFailure=</varname></term>
521
522 <listitem><para>Lists one or more
523 units that are activated when this
524 unit enters the
525 '<literal>failed</literal>'
526 state.</para></listitem>
527 </varlistentry>
528
529 <varlistentry>
530 <term><varname>PropagateReloadTo=</varname></term>
531 <term><varname>PropagateReloadFrom=</varname></term>
532
533 <listitem><para>Lists one or more
534 units where reload requests on the
535 unit will be propagated to/on the
536 other unit will be propagated
537 from. Issuing a reload request on a
538 unit will automatically also enqueue a
539 reload request on all units that the
540 reload request shall be propagated to
541 via these two
542 settings.</para></listitem>
543 </varlistentry>
544
545 <varlistentry>
546 <term><varname>RequiresMountsFor=</varname></term>
547
548 <listitem><para>Takes a space
549 separated list of paths. Automatically
550 adds dependencies of type
551 <varname>Requires=</varname> and
552 <varname>After=</varname> for all
553 mount units required to access the
554 specified path.</para></listitem>
555 </varlistentry>
556
557 <varlistentry>
558 <term><varname>OnFailureIsolate=</varname></term>
559
560 <listitem><para>Takes a boolean
561 argument. If <option>true</option> the
562 unit listed in
563 <varname>OnFailure=</varname> will be
564 enqueued in isolation mode, i.e. all
565 units that are not its dependency will
566 be stopped. If this is set only a
567 single unit may be listed in
568 <varname>OnFailure=</varname>. Defaults
569 to
570 <option>false</option>.</para></listitem>
571 </varlistentry>
572
573 <varlistentry>
574 <term><varname>IgnoreOnIsolate=</varname></term>
575
576 <listitem><para>Takes a boolean
577 argument. If <option>true</option>
578 this unit will not be stopped when
579 isolating another unit. Defaults to
580 <option>false</option>.</para></listitem>
581 </varlistentry>
582
583 <varlistentry>
584 <term><varname>IgnoreOnSnapshot=</varname></term>
585
586 <listitem><para>Takes a boolean
587 argument. If <option>true</option>
588 this unit will not be included in
589 snapshots. Defaults to
590 <option>true</option> for device and
591 snapshot units, <option>false</option>
592 for the others.</para></listitem>
593 </varlistentry>
594
595 <varlistentry>
596 <term><varname>StopWhenUnneeded=</varname></term>
597
598 <listitem><para>Takes a boolean
599 argument. If <option>true</option>
600 this unit will be stopped when it is
601 no longer used. Note that in order to
602 minimize the work to be executed,
603 systemd will not stop units by default
604 unless they are conflicting with other
605 units, or the user explicitly
606 requested their shut down. If this
607 option is set, a unit will be
608 automatically cleaned up if no other
609 active unit requires it. Defaults to
610 <option>false</option>.</para></listitem>
611 </varlistentry>
612
613 <varlistentry>
614 <term><varname>RefuseManualStart=</varname></term>
615 <term><varname>RefuseManualStop=</varname></term>
616
617 <listitem><para>Takes a boolean
618 argument. If <option>true</option>
619 this unit can only be activated
620 (resp. deactivated) indirectly. In
621 this case explicit start-up
622 (resp. termination) requested by the
623 user is denied, however if it is
624 started (resp. stopped) as a
625 dependency of another unit, start-up
626 (resp. termination) will succeed. This
627 is mostly a safety feature to ensure
628 that the user does not accidentally
629 activate units that are not intended
630 to be activated explicitly, and not
631 accidentally deactivate units that are
632 not intended to be deactivated.
633 These options default to
634 <option>false</option>.</para></listitem>
635 </varlistentry>
636
637 <varlistentry>
638 <term><varname>AllowIsolate=</varname></term>
639
640 <listitem><para>Takes a boolean
641 argument. If <option>true</option>
642 this unit may be used with the
643 <command>systemctl isolate</command>
644 command. Otherwise this will be
645 refused. It probably is a good idea to
646 leave this disabled except for target
647 units that shall be used similar to
648 runlevels in SysV init systems, just
649 as a precaution to avoid unusable
650 system states. This option defaults to
651 <option>false</option>.</para></listitem>
652 </varlistentry>
653
654 <varlistentry>
655 <term><varname>DefaultDependencies=</varname></term>
656
657 <listitem><para>Takes a boolean
658 argument. If <option>true</option>
659 (the default), a few default
660 dependencies will implicitly be
661 created for the unit. The actual
662 dependencies created depend on the
663 unit type. For example, for service
664 units, these dependencies ensure that
665 the service is started only after
666 basic system initialization is
667 completed and is properly terminated on
668 system shutdown. See the respective
669 man pages for details. Generally, only
670 services involved with early boot or
671 late shutdown should set this option
672 to <option>false</option>. It is
673 highly recommended to leave this
674 option enabled for the majority of
675 common units. If set to
676 <option>false</option> this option
677 does not disable all implicit
678 dependencies, just non-essential
679 ones.</para></listitem>
680 </varlistentry>
681
682 <varlistentry>
683 <term><varname>JobTimeoutSec=</varname></term>
684
685 <listitem><para>When clients are
686 waiting for a job of this unit to
687 complete, time out after the specified
688 time. If this time limit is reached
689 the job will be cancelled, the unit
690 however will not change state or even
691 enter the '<literal>failed</literal>'
692 mode. This value defaults to 0 (job
693 timeouts disabled), except for device
694 units. NB: this timeout is independent
695 from any unit-specific timeout (for
696 example, the timeout set with
697 <varname>Timeout=</varname> in service
698 units) as the job timeout has no
699 effect on the unit itself, only on the
700 job that might be pending for it. Or
701 in other words: unit-specific timeouts
702 are useful to abort unit state
703 changes, and revert them. The job
704 timeout set with this option however
705 is useful to abort only the job
706 waiting for the unit state to
707 change.</para></listitem>
708 </varlistentry>
709
710 <varlistentry>
711 <term><varname>ConditionPathExists=</varname></term>
712 <term><varname>ConditionPathExistsGlob=</varname></term>
713 <term><varname>ConditionPathIsDirectory=</varname></term>
714 <term><varname>ConditionPathIsSymbolicLink=</varname></term>
715 <term><varname>ConditionPathIsMountPoint=</varname></term>
716 <term><varname>ConditionPathIsReadWrite=</varname></term>
717 <term><varname>ConditionDirectoryNotEmpty=</varname></term>
718 <term><varname>ConditionFileIsExecutable=</varname></term>
719 <term><varname>ConditionKernelCommandLine=</varname></term>
720 <term><varname>ConditionVirtualization=</varname></term>
721 <term><varname>ConditionSecurity=</varname></term>
722 <term><varname>ConditionCapability=</varname></term>
723 <term><varname>ConditionNull=</varname></term>
724
725 <listitem><para>Before starting a unit
726 verify that the specified condition is
727 true. With
728 <varname>ConditionPathExists=</varname>
729 a file existence condition can be
730 checked before a unit is started. If
731 the specified absolute path name does
732 not exist, startup of a unit will not
733 actually happen, however the unit is
734 still useful for ordering purposes in
735 this case. The condition is checked at
736 the time the queued start job is to be
737 executed. If the absolute path name
738 passed to
739 <varname>ConditionPathExists=</varname>
740 is prefixed with an exclamation mark
741 (!), the test is negated, and the unit
742 is only started if the path does not
743 exist.
744 <varname>ConditionPathExistsGlob=</varname>
745 works in a similar way, but checks for
746 the existence of at least one file or
747 directory matching the specified
748 globbing
749 pattern. <varname>ConditionPathIsDirectory=</varname>
750 is similar to
751 <varname>ConditionPathExists=</varname>
752 but verifies whether a certain path
753 exists and is a
754 directory. <varname>ConditionPathIsSymbolicLink=</varname>
755 is similar to
756 <varname>ConditionPathExists=</varname>
757 but verifies whether a certain path
758 exists and is a symbolic
759 link. <varname>ConditionPathIsMountPoint=</varname>
760 is similar to
761 <varname>ConditionPathExists=</varname>
762 but verifies whether a certain path
763 exists and is a mount
764 point. <varname>ConditionPathIsReadWrite=</varname>
765 is similar to
766 <varname>ConditionPathExists=</varname>
767 but verifies whether the underlying
768 file system is read and writable
769 (i.e. not mounted
770 read-only). <varname>ConditionFileIsExecutable=</varname>
771 is similar to
772 <varname>ConditionPathExists=</varname>
773 but verifies whether a certain path
774 exists, is a regular file and marked
775 executable.
776 <varname>ConditionDirectoryNotEmpty=</varname>
777 is similar to
778 <varname>ConditionPathExists=</varname>
779 but verifies whether a certain path
780 exists and is a non-empty
781 directory. Similarly
782 <varname>ConditionKernelCommandLine=</varname>
783 may be used to check whether a
784 specific kernel command line option is
785 set (or if prefixed with the
786 exclamation mark unset). The argument
787 must either be a single word, or an
788 assignment (i.e. two words, separated
789 by the equality sign). In the former
790 case the kernel command line is
791 searched for the word appearing as is,
792 or as left hand side of an
793 assignment. In the latter case the
794 exact assignment is looked for with
795 right and left hand side
796 matching. <varname>ConditionVirtualization=</varname>
797 may be used to check whether the
798 system is executed in a virtualized
799 environment and optionally test
800 whether it is a specific
801 implementation. Takes either boolean
802 value to check if being executed in
803 any virtualized environment, or one of
804 <varname>vm</varname> and
805 <varname>container</varname> to test
806 against a specific type of
807 virtualization solution, or one of
808 <varname>qemu</varname>,
809 <varname>kvm</varname>,
810 <varname>vmware</varname>,
811 <varname>microsoft</varname>,
812 <varname>oracle</varname>,
813 <varname>xen</varname>,
814 <varname>bochs</varname>,
815 <varname>chroot</varname>,
816 <varname>openvz</varname>,
817 <varname>lxc</varname>,
818 <varname>lxc-libvirt</varname>,
819 <varname>systemd-nspawn</varname> to
820 test against a specific
821 implementation. If multiple
822 virtualization technologies are nested
823 only the innermost is considered. The
824 test may be negated by prepending an
825 exclamation mark.
826 <varname>ConditionSecurity=</varname>
827 may be used to check whether the given
828 security module is enabled on the
829 system. Currently the only recognized
830 value is <varname>selinux</varname>.
831 The test may be negated by prepending
832 an exclamation
833 mark. <varname>ConditionCapability=</varname>
834 may be used to check whether the given
835 capability exists in the capability
836 bounding set of the service manager
837 (i.e. this does not check whether
838 capability is actually available in
839 the permitted or effective sets, see
840 <citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
841 for details). Pass a capability name
842 such as <literal>CAP_MKNOD</literal>,
843 possibly prefixed with an exclamation
844 mark to negate the check. Finally,
845 <varname>ConditionNull=</varname> may
846 be used to add a constant condition
847 check value to the unit. It takes a
848 boolean argument. If set to
849 <varname>false</varname> the condition
850 will always fail, otherwise
851 succeed. If multiple conditions are
852 specified the unit will be executed if
853 all of them apply (i.e. a logical AND
854 is applied). Condition checks can be
855 prefixed with a pipe symbol (|) in
856 which case a condition becomes a
857 triggering condition. If at least one
858 triggering condition is defined for a
859 unit then the unit will be executed if
860 at least one of the triggering
861 conditions apply and all of the
862 non-triggering conditions. If you
863 prefix an argument with the pipe
864 symbol and an exclamation mark the
865 pipe symbol must be passed first, the
866 exclamation second. Except for
867 <varname>ConditionPathIsSymbolicLink=</varname>,
868 all path checks follow
869 symlinks.</para></listitem>
870 </varlistentry>
871
872 <varlistentry>
873 <term><varname>SourcePath=</varname></term>
874 <listitem><para>A path to a
875 configuration file this unit has been
876 generated from. This is primarily
877 useful for implementation of generator
878 tools that convert configuration from
879 an external configuration file format
880 into native unit files. Thus
881 functionality should not be used in
882 normal units.</para></listitem>
883 </varlistentry>
884 </variablelist>
885
886 <para>Unit file may include a [Install] section, which
887 carries installation information for the unit. This
888 section is not interpreted by
889 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
890 during runtime. It is used exclusively by the
891 <command>enable</command> and
892 <command>disable</command> commands of the
893 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
894 tool during installation of a unit:</para>
895
896 <variablelist>
897 <varlistentry>
898 <term><varname>Alias=</varname></term>
899
900 <listitem><para>Additional names this
901 unit shall be installed under. The
902 names listed here must have the same
903 suffix (i.e. type) as the unit file
904 name. This option may be specified
905 more than once, in which case all
906 listed names are used. At installation
907 time,
908 <command>systemctl enable</command>
909 will create symlinks from these names
910 to the unit file name.</para></listitem>
911 </varlistentry>
912
913 <varlistentry>
914 <term><varname>WantedBy=</varname></term>
915 <term><varname>RequiredBy=</varname></term>
916
917 <listitem><para>Installs a symlink in
918 the <filename>.wants/</filename>
919 resp. <filename>.requires/</filename>
920 subdirectory for a unit. This has the
921 effect that when the listed unit name
922 is activated the unit listing it is
923 activated
924 too. <command>WantedBy=foo.service</command>
925 in a service
926 <filename>bar.service</filename> is
927 mostly equivalent to
928 <command>Alias=foo.service.wants/bar.service</command>
929 in the same file.</para></listitem>
930 </varlistentry>
931
932 <varlistentry>
933 <term><varname>Also=</varname></term>
934
935 <listitem><para>Additional units to
936 install when this unit is
937 installed. If the user requests
938 installation of a unit with this
939 option configured,
940 <command>systemctl enable</command>
941 will automatically install units
942 listed in this option as
943 well.</para></listitem>
944 </varlistentry>
945 </variablelist>
946
947 </refsect1>
948
949 <refsect1>
950 <title>See Also</title>
951 <para>
952 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
953 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
954 <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
955 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
956 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
957 <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
958 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
959 <citerefentry><refentrytitle>systemd.automount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
960 <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
961 <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
962 <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
963 <citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
964 <citerefentry><refentrytitle>systemd.snapshot</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
965 <citerefentry><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
966 </para>
967 </refsect1>
968
969 </refentry>