File Coverage

blib/lib/Config/Model/models/Systemd/Section/Unit.pl
Criterion Covered Total %
statement 24 24 100.0
branch n/a
condition n/a
subroutine 8 8 100.0
pod n/a
total 32 32 100.0


line stmt bran cond sub pod time code
1             #
2             # This file is part of Config-Model-Systemd
3             #
4             # This software is Copyright (c) 2008-2022 by Dominique Dumont.
5             #
6             # This is free software, licensed under:
7             #
8             # The GNU Lesser General Public License, Version 2.1, February 1999
9             #
10 4     4   17392 use strict;
  4     1   14  
  4     1   124  
  1     1   3109  
  1         3  
  1         25  
  1         3238  
  1         4  
  1         24  
  1         3085  
  1         3  
  1         22  
11 4     4   25 use warnings;
  4     1   9  
  4     1   9299  
  1     1   8  
  1         3  
  1         2610  
  1         7  
  1         3  
  1         2460  
  1         6  
  1         2  
  1         2279  
12              
13             return [
14             {
15             'accept' => [
16             '.*',
17             {
18             'type' => 'leaf',
19             'value_type' => 'uniline',
20             'warn' => 'Unexpected systemd parameter. Please contact cme author to update systemd model.'
21             }
22             ],
23             'class_description' => "A unit file is a plain text ini-style file that encodes information about a service, a
24             socket, a device, a mount point, an automount point, a swap file or partition, a start-up
25             target, a watched file system path, a timer controlled and supervised by
26             L<systemd(1)>, a
27             resource management slice or a group of externally created processes. See
28             L<systemd.syntax(7)>
29             for a general description of the syntax.
30              
31             This man page lists the common configuration options of all
32             the unit types. These options need to be configured in the [Unit]
33             or [Install] sections of the unit files.
34              
35             In addition to the generic [Unit] and [Install] sections
36             described here, each unit may have a type-specific section, e.g.
37             [Service] for a service unit. See the respective man pages for
38             more information:
39             L<systemd.service(5)>,
40             L<systemd.socket(5)>,
41             L<systemd.device(5)>,
42             L<systemd.mount(5)>,
43             L<systemd.automount(5)>,
44             L<systemd.swap(5)>,
45             L<systemd.target(5)>,
46             L<systemd.path(5)>,
47             L<systemd.timer(5)>,
48             L<systemd.slice(5)>,
49             L<systemd.scope(5)>.
50              
51              
52             Unit files are loaded from a set of paths determined during compilation, described in the next
53             section.
54              
55             Valid unit names consist of a \"name prefix\" and a dot and a suffix specifying the unit type. The
56             \"unit prefix\" must consist of one or more valid characters (ASCII letters, digits, C<:>,
57             C<->, C<_>, C<.>, and C<\\>). The total
58             length of the unit name including the suffix must not exceed 256 characters. The type suffix must be one
59             of C<.service>, C<.socket>, C<.device>,
60             C<.mount>, C<.automount>, C<.swap>,
61             C<.target>, C<.path>, C<.timer>,
62             C<.slice>, or C<.scope>.
63              
64             Units names can be parameterized by a single argument called the \"instance name\". The unit is then
65             constructed based on a \"template file\" which serves as the definition of multiple services or other
66             units. A template unit must have a single C<\@> at the end of the name (right before the
67             type suffix). The name of the full unit is formed by inserting the instance name between
68             C<\@> and the unit type suffix. In the unit file itself, the instance parameter may be
69             referred to using C<%i> and other specifiers, see below.
70              
71             Unit files may contain additional options on top of those listed here. If systemd encounters an
72             unknown option, it will write a warning log message but continue loading the unit. If an option or
73             section name is prefixed with C<X->, it is ignored completely by systemd. Options within an
74             ignored section do not need the prefix. Applications may use this to include additional information in
75             the unit files. To access those options, applications need to parse the unit files on their own.
76              
77             Units can be aliased (have an alternative name), by creating a symlink from the new name to the
78             existing name in one of the unit search paths. For example, C<systemd-networkd.service>
79             has the alias C<dbus-org.freedesktop.network1.service>, created during installation as
80             a symlink, so when systemd is asked through D-Bus to load
81             C<dbus-org.freedesktop.network1.service>, it'll load
82             C<systemd-networkd.service>. As another example, C<default.target> \x{2014}
83             the default system target started at boot \x{2014} is commonly aliased to either
84             C<multi-user.target> or C<graphical.target> to select what is started
85             by default. Alias names may be used in commands like disable,
86             start, stop, status, and similar, and in all
87             unit dependency directives, including C<Wants>, C<Requires>,
88             C<Before>, C<After>. Aliases cannot be used with the
89             preset command.
90              
91             Aliases obey the following restrictions: a unit of a certain type (C<.service>,
92             C<.socket>, \x{2026}) can only be aliased by a name with the same type suffix. A plain unit (not
93             a template or an instance), may only be aliased by a plain name. A template instance may only be aliased
94             by another template instance, and the instance part must be identical. A template may be aliased by
95             another template (in which case the alias applies to all instances of the template). As a special case, a
96             template instance (e.g. C<alias\@inst.service>) may be a symlink to different template
97             (e.g. C<template\@inst.service>). In that case, just this specific instance is aliased,
98             while other instances of the template (e.g. C<alias\@foo.service>,
99             C<alias\@bar.service>) are not aliased. Those rules preserve the requirement that the
100             instance (if any) is always uniquely defined for a given unit and all its aliases. The target of alias
101             symlink must point to a valid unit file location, i.e. the symlink target name must match the symlink
102             source name as described, and the destination path must be in one of the unit search paths, see UNIT FILE
103             LOAD PATH section below for more details. Note that the target file may not exist, i.e. the symlink may
104             be dangling.
105              
106             Unit files may specify aliases through the C<Alias> directive in the [Install]
107             section. When the unit is enabled, symlinks will be created for those names, and removed when the unit is
108             disabled. For example, C<reboot.target> specifies
109             C<Alias=ctrl-alt-del.target>, so when enabled, the symlink
110             C</etc/systemd/system/ctrl-alt-del.service> pointing to the
111             C<reboot.target> file will be created, and when
112             CtrlAltDel is invoked,
113             systemd will look for the C<ctrl-alt-del.service> and execute
114             C<reboot.service>. systemd does not look at the [Install] section at
115             all during normal operation, so any directives in that section only have an effect through the symlinks
116             created during enablement.
117              
118             Along with a unit file C<foo.service>, the directory
119             C<foo.service.wants/> may exist. All unit files symlinked from such a directory are
120             implicitly added as dependencies of type C<Wants> to the unit. Similar functionality
121             exists for C<Requires> type dependencies as well, the directory suffix is
122             C<.requires/> in this case. This functionality is useful to hook units into the
123             start-up of other units, without having to modify their unit files. For details about the semantics of
124             C<Wants> and C<Requires>, see below. The preferred way to create
125             symlinks in the C<.wants/> or C<.requires/> directories is by
126             specifying the dependency in [Install] section of the target unit, and creating the symlink in the file
127             system with the enable or preset commands of
128             L<systemctl(1)>. The
129             target can be a normal unit (either plain or a specific instance of a template unit). In case when the
130             source unit is a template, the target can also be a template, in which case the instance will be
131             \"propagated\" to the target unit to form a valid unit instance. The target of symlinks in
132             C<.wants/> or C<.requires/> must thus point to a valid unit file
133             location, i.e. the symlink target name must satisfy the described requirements, and the destination path
134             must be in one of the unit search paths, see UNIT FILE LOAD PATH section below for more details. Note
135             that the target file may not exist, i.e. the symlink may be dangling.
136              
137             Along with a unit file C<foo.service>, a \"drop-in\" directory
138             C<foo.service.d/> may exist. All files with the suffix
139             C<.conf> from this directory will be merged in the alphanumeric order and parsed
140             after the main unit file itself has been parsed. This is useful to alter or add configuration
141             settings for a unit, without having to modify unit files. Each drop-in file must contain appropriate
142             section headers. For instantiated units, this logic will first look for the instance
143             C<.d/> subdirectory (e.g. C<foo\@bar.service.d/>) and read its
144             C<.conf> files, followed by the template C<.d/> subdirectory (e.g.
145             C<foo\@.service.d/>) and the C<.conf> files there. Moreover for unit
146             names containing dashes (C<->), the set of directories generated by repeatedly
147             truncating the unit name after all dashes is searched too. Specifically, for a unit name
148             C<foo-bar-baz.service> not only the regular drop-in directory
149             C<foo-bar-baz.service.d/> is searched but also both C<foo-bar-.service.d/> and
150             C<foo-.service.d/>. This is useful for defining common drop-ins for a set of related units, whose
151             names begin with a common prefix. This scheme is particularly useful for mount, automount and slice units, whose
152             systematic naming structure is built around dashes as component separators. Note that equally named drop-in files
153             further down the prefix hierarchy override those further up,
154             i.e. C<foo-bar-.service.d/10-override.conf> overrides
155             C<foo-.service.d/10-override.conf>.
156              
157             In cases of unit aliases (described above), dropins for the aliased name and all aliases are
158             loaded. In the example of C<default.target> aliasing
159             C<graphical.target>, C<default.target.d/>,
160             C<default.target.wants/>, C<default.target.requires/>,
161             C<graphical.target.d/>, C<graphical.target.wants/>,
162             C<graphical.target.requires/> would all be read. For templates, dropins for the
163             template, any template aliases, the template instance, and all alias instances are read. When just a
164             specific template instance is aliased, then the dropins for the target template, the target template
165             instance, and the alias template instance are read.
166              
167             In addition to C</etc/systemd/system>, the drop-in C<.d/>
168             directories for system services can be placed in C</usr/lib/systemd/system> or
169             C</run/systemd/system> directories. Drop-in files in C</etc/>
170             take precedence over those in C</run/> which in turn take precedence over those
171             in C</usr/lib/>. Drop-in files under any of these directories take precedence
172             over unit files wherever located. Multiple drop-in files with different names are applied in
173             lexicographic order, regardless of which of the directories they reside in.
174              
175             Units also support a top-level drop-in with C<type.d/>,
176             where type may be e.g. C<service> or C<socket>,
177             that allows altering or adding to the settings of all corresponding unit files on the system.
178             The formatting and precedence of applying drop-in configurations follow what is defined above.
179             Files in C<type.d/> have lower precedence compared
180             to files in name-specific override directories. The usual rules apply: multiple drop-in files
181             with different names are applied in lexicographic order, regardless of which of the directories
182             they reside in, so a file in C<type.d/> applies
183             to a unit only if there are no drop-ins or masks with that name in directories with higher
184             precedence. See Examples.
185              
186             Note that while systemd offers a flexible dependency system
187             between units it is recommended to use this functionality only
188             sparingly and instead rely on techniques such as bus-based or
189             socket-based activation which make dependencies implicit,
190             resulting in a both simpler and more flexible system.
191              
192             As mentioned above, a unit may be instantiated from a template file. This allows creation
193             of multiple units from a single configuration file. If systemd looks for a unit configuration
194             file, it will first search for the literal unit name in the file system. If that yields no
195             success and the unit name contains an C<\@> character, systemd will look for a
196             unit template that shares the same name but with the instance string (i.e. the part between the
197             C<\@> character and the suffix) removed. Example: if a service
198             C<getty\@tty3.service> is requested and no file by that name is found, systemd
199             will look for C<getty\@.service> and instantiate a service from that
200             configuration file if it is found.
201              
202             To refer to the instance string from within the
203             configuration file you may use the special C<%i>
204             specifier in many of the configuration options. See below for
205             details.
206              
207             If a unit file is empty (i.e. has the file size 0) or is
208             symlinked to C</dev/null>, its configuration
209             will not be loaded and it appears with a load state of
210             C<masked>, and cannot be activated. Use this as an
211             effective way to fully disable a unit, making it impossible to
212             start it even manually.
213              
214             The unit file format is covered by the
215             L<Interface
216             Portability and Stability Promise|https://systemd.io/PORTABILITY_AND_STABILITY/>.
217              
218             The set of load paths for the user manager instance may be augmented or
219             changed using various environment variables. And environment variables may in
220             turn be set using environment generators, see
221             L<systemd.environment-generator(7)>.
222             In particular, C<\$XDG_DATA_HOME> and
223             C<\$XDG_DATA_DIRS> may be easily set using
224             L<systemd-environment-d-generator(8)>.
225             Thus, directories listed here are just the defaults. To see the actual list that
226             would be used based on compilation options and current environment use
227              
228              
229             +-+systemd-analyze --user unit-paths
230              
231              
232              
233             Moreover, additional units might be loaded into systemd from directories not on the unit load path
234             by creating a symlink pointing to a unit file in the directories. You can use systemctl
235             link for this; see
236             L<systemctl(1)>. The file
237             system where the linked unit files are located must be accessible when systemd is started (e.g. anything
238             underneath C</home/> or C</var/> is not allowed, unless those
239             directories are located on the root file system).
240              
241             It is important to distinguish \"linked unit files\" from \"unit file aliases\": any symlink where the
242             symlink target is within the unit load path becomes an alias: the source name and
243             the target file name must satisfy specific constraints listed above in the discussion of aliases, but the
244             symlink target doesn't have to exist, and in fact the symlink target path is not used, except to check
245             whether the target is within the unit load path. In contrast, a symlink which goes outside of the unit
246             load path signifies a linked unit file. The symlink is followed when loading the file, but the
247             destination name is otherwise unused (and may even not be a valid unit file name). For example, symlinks
248             C</etc/systemd/system/alias1.service> \x{2192} C<service1.service>,
249             C</etc/systemd/system/alias2.service> \x{2192} C</usr/lib/systemd/service1.service>,
250             C</etc/systemd/system/alias3.service> \x{2192} C</etc/systemd/system/service1.service>
251             are all valid aliases and C<service1.service> will have
252             four names, even if the unit file is located at
253             C</run/systemd/system/service1.service>. In contrast,
254             a symlink C</etc/systemd/system/link1.service> \x{2192} C<../link1_service_file>
255             means that C<link1.service> is a \"linked unit\" and the contents of
256             C</etc/systemd/link1_service_file> provide its configuration.
257              
258             Unit files may also include a number of C<Condition\x{2026}=> and C<Assert\x{2026}=> settings. Before the unit is started, systemd will verify that the
259             specified conditions and asserts are true. If not, the starting of the unit will be (mostly silently)
260             skipped (in case of conditions), or aborted with an error message (in case of asserts). Failing
261             conditions or asserts will not result in the unit being moved into the C<failed>
262             state. The conditions and asserts are checked at the time the queued start job is to be executed. The
263             ordering dependencies are still respected, so other units are still pulled in and ordered as if this
264             unit was successfully activated, and the conditions and asserts are executed the precise moment the
265             unit would normally start and thus can validate system state after the units ordered before completed
266             initialization. Use condition expressions for skipping units that do not apply to the local system, for
267             example because the kernel or runtime environment doesn't require their functionality.
268              
269              
270             If multiple conditions are specified, the unit will be executed if all of them apply (i.e. a
271             logical AND is applied). Condition checks can use a pipe symbol (C<|>) after the equals
272             sign (C<Condition\x{2026}=|\x{2026}>), which causes the condition to become a
273             triggering condition. If at least one triggering condition is defined for a unit,
274             then the unit will be started if at least one of the triggering conditions of the unit applies and all
275             of the regular (i.e. non-triggering) conditions apply. If you prefix an argument with the pipe symbol
276             and an exclamation mark, the pipe symbol must be passed first, the exclamation second. If any of these
277             options is assigned the empty string, the list of conditions is reset completely, all previous
278             condition settings (of any kind) will have no effect.
279              
280             The C<AssertArchitecture>, C<AssertVirtualization>, \x{2026} options
281             are similar to conditions but cause the start job to fail (instead of being skipped). The failed check
282             is logged. Units with unmet conditions are considered to be in a clean state and will be garbage
283             collected if they are not referenced. This means that when queried, the condition failure may or may
284             not show up in the state of the unit.
285              
286             Note that neither assertion nor condition expressions result in unit state changes. Also note
287             that both are checked at the time the job is to be executed, i.e. long after depending jobs and it
288             itself were queued. Thus, neither condition nor assertion expressions are suitable for conditionalizing
289             unit dependencies.
290              
291             The condition verb of
292             L<systemd-analyze(1)> can
293             be used to test condition and assert expressions.
294              
295             Except for C<ConditionPathIsSymbolicLink>, all path checks follow symlinks.
296             This configuration class was generated from systemd documentation.
297             by L<parse-man.pl|https://github.com/dod38fr/config-model-systemd/contrib/parse-man.pl>
298             ",
299             'copyright' => [
300             '2010-2016 Lennart Poettering and others',
301             '2016 Dominique Dumont'
302             ],
303             'element' => [
304             'Description',
305             {
306             'description' => 'A short human readable title of the unit. This may be used by
307             systemd (and other UIs) as a user-visible label for the unit, so this string
308             should identify the unit rather than describe it, despite the name. This string also shouldn\'t just
309             repeat the unit name. C<Apache2 Web Server> is a good example. Bad examples are
310             C<high-performance light-weight HTTP server> (too generic) or
311             C<Apache2> (meaningless for people who do not know Apache, duplicates the unit
312             name). systemd may use this string as a noun in status messages (C<Starting
313             description...>, C<Started
314             description.>, C<Reached target
315             description.>, C<Failed to start
316             description.>), so it should be capitalized, and should not be a
317             full sentence, or a phrase with a continuous verb. Bad examples include C<exiting the
318             container> or C<updating the database once per day.>.',
319             'type' => 'leaf',
320             'value_type' => 'uniline'
321             },
322             'Documentation',
323             {
324             'cargo' => {
325             'type' => 'leaf',
326             'value_type' => 'uniline'
327             },
328             'description' => 'A space-separated list of URIs referencing
329             documentation for this unit or its configuration. Accepted are
330             only URIs of the types C<http://>,
331             C<https://>, C<file:>,
332             C<info:>, C<man:>. For more
333             information about the syntax of these URIs, see L<uri(7)>.
334             The URIs should be listed in order of relevance, starting with
335             the most relevant. It is a good idea to first reference
336             documentation that explains what the unit\'s purpose is,
337             followed by how it is configured, followed by any other
338             related documentation. This option may be specified more than
339             once, in which case the specified list of URIs is merged. If
340             the empty string is assigned to this option, the list is reset
341             and all prior assignments will have no
342             effect.',
343             'type' => 'list'
344             },
345             'Wants',
346             {
347             'cargo' => {
348             'type' => 'leaf',
349             'value_type' => 'uniline'
350             },
351             'description' => 'Configures (weak) requirement dependencies on other units. This option may be
352             specified more than once or multiple space-separated units may be specified in one option in which
353             case dependencies for all listed names will be created. Dependencies of this type may also be
354             configured outside of the unit configuration file by adding a symlink to a
355             C<.wants/> directory accompanying the unit file. For details, see above.
356              
357             Units listed in this option will be started if the configuring unit is. However, if the listed
358             units fail to start or cannot be added to the transaction, this has no impact on the validity of the
359             transaction as a whole, and this unit will still be started. This is the recommended way to hook
360             the start-up of one unit to the start-up of another unit.
361              
362             Note that requirement dependencies do not influence the order in which services are started or
363             stopped. This has to be configured independently with the C<After> or
364             C<Before> options. If unit C<foo.service> pulls in unit
365             C<bar.service> as configured with C<Wants> and no ordering is
366             configured with C<After> or C<Before>, then both units will be
367             started simultaneously and without any delay between them if C<foo.service> is
368             activated.',
369             'type' => 'list'
370             },
371             'Requires',
372             {
373             'cargo' => {
374             'type' => 'leaf',
375             'value_type' => 'uniline'
376             },
377             'description' => "Similar to C<Wants>, but declares a stronger requirement
378             dependency. Dependencies of this type may also be configured by adding a symlink to a
379             C<.requires/> directory accompanying the unit file.
380              
381             If this unit gets activated, the units listed will be activated as well. If one of
382             the other units fails to activate, and an ordering dependency C<After> on the
383             failing unit is set, this unit will not be started. Besides, with or without specifying
384             C<After>, this unit will be stopped (or restarted) if one of the other units is
385             explicitly stopped (or restarted).
386              
387             Often, it is a better choice to use C<Wants> instead of
388             C<Requires> in order to achieve a system that is more robust when dealing with
389             failing services.
390              
391             Note that this dependency type does not imply that the other unit always has to be in active state when
392             this unit is running. Specifically: failing condition checks (such as C<ConditionPathExists>,
393             C<ConditionPathIsSymbolicLink>, \x{2026} \x{2014} see below) do not cause the start job of a unit with a
394             C<Requires> dependency on it to fail. Also, some unit types may deactivate on their own (for
395             example, a service process may decide to exit cleanly, or a device may be unplugged by the user), which is not
396             propagated to units having a C<Requires> dependency. Use the C<BindsTo>
397             dependency type together with C<After> to ensure that a unit may never be in active state
398             without a specific other unit also in active state (see below).",
399             'type' => 'list'
400             },
401             'Requisite',
402             {
403             'cargo' => {
404             'type' => 'leaf',
405             'value_type' => 'uniline'
406             },
407             'description' => 'Similar to C<Requires>. However, if the units listed here
408             are not started already, they will not be started and the starting of this unit will fail
409             immediately. C<Requisite> does not imply an ordering dependency, even if
410             both units are started in the same transaction. Hence this setting should usually be
411             combined with C<After>, to ensure this unit is not started before the other
412             unit.
413              
414             When C<Requisite=b.service> is used on
415             C<a.service>, this dependency will show as
416             C<RequisiteOf=a.service> in property listing of
417             C<b.service>. C<RequisiteOf>
418             dependency cannot be specified directly.',
419             'type' => 'list'
420             },
421             'BindsTo',
422             {
423             'cargo' => {
424             'type' => 'leaf',
425             'value_type' => 'uniline'
426             },
427             'description' => "Configures requirement dependencies, very similar in style to
428             C<Requires>. However, this dependency type is stronger: in addition to the effect of
429             C<Requires> it declares that if the unit bound to is stopped, this unit will be stopped
430             too. This means a unit bound to another unit that suddenly enters inactive state will be stopped too.
431             Units can suddenly, unexpectedly enter inactive state for different reasons: the main process of a service unit
432             might terminate on its own choice, the backing device of a device unit might be unplugged or the mount point of
433             a mount unit might be unmounted without involvement of the system and service manager.
434              
435             When used in conjunction with C<After> on the same unit the behaviour of
436             C<BindsTo> is even stronger. In this case, the unit bound to strictly has to be in active
437             state for this unit to also be in active state. This not only means a unit bound to another unit that suddenly
438             enters inactive state, but also one that is bound to another unit that gets skipped due to an unmet condition
439             check (such as C<ConditionPathExists>, C<ConditionPathIsSymbolicLink>, \x{2026} \x{2014}
440             see below) will be stopped, should it be running. Hence, in many cases it is best to combine
441             C<BindsTo> with C<After>.
442              
443             When C<BindsTo=b.service> is used on
444             C<a.service>, this dependency will show as
445             C<BoundBy=a.service> in property listing of
446             C<b.service>. C<BoundBy>
447             dependency cannot be specified directly.",
448             'type' => 'list'
449             },
450             'PartOf',
451             {
452             'cargo' => {
453             'type' => 'leaf',
454             'value_type' => 'uniline'
455             },
456             'description' => "Configures dependencies similar to
457             C<Requires>, but limited to stopping and
458             restarting of units. When systemd stops or restarts the units
459             listed here, the action is propagated to this unit. Note that
460             this is a one-way dependency\x{a0}\x{2014} changes to this unit do not
461             affect the listed units.
462              
463             When C<PartOf=b.service> is used on
464             C<a.service>, this dependency will show as
465             C<ConsistsOf=a.service> in property listing of
466             C<b.service>. C<ConsistsOf>
467             dependency cannot be specified directly.",
468             'type' => 'list'
469             },
470             'Upholds',
471             {
472             'description' => 'Configures dependencies similar to C<Wants>, but as long as this unit
473             is up, all units listed in C<Upholds> are started whenever found to be inactive or
474             failed, and no job is queued for them. While a C<Wants> dependency on another unit
475             has a one-time effect when this units started, a C<Upholds> dependency on it has a
476             continuous effect, constantly restarting the unit if necessary. This is an alternative to the
477             C<Restart> setting of service units, to ensure they are kept running whatever
478             happens.
479              
480             When C<Upholds=b.service> is used on C<a.service>, this
481             dependency will show as C<UpheldBy=a.service> in the property listing of
482             C<b.service>. The C<UpheldBy> dependency cannot be specified
483             directly.',
484             'type' => 'leaf',
485             'value_type' => 'uniline'
486             },
487             'Conflicts',
488             {
489             'cargo' => {
490             'type' => 'leaf',
491             'value_type' => 'uniline'
492             },
493             'description' => 'A space-separated list of unit names. Configures negative requirement
494             dependencies. If a unit has a C<Conflicts> setting on another unit, starting the
495             former will stop the latter and vice versa.
496              
497             Note that this setting does not imply an ordering dependency, similarly to the
498             C<Wants> and C<Requires> dependencies described above. This means
499             that to ensure that the conflicting unit is stopped before the other unit is started, an
500             C<After> or C<Before> dependency must be declared. It doesn\'t
501             matter which of the two ordering dependencies is used, because stop jobs are always ordered before
502             start jobs, see the discussion in C<Before>/C<After> below.
503              
504             If unit A that conflicts with unit B is scheduled to
505             be started at the same time as B, the transaction will either
506             fail (in case both are required parts of the transaction) or be
507             modified to be fixed (in case one or both jobs are not a
508             required part of the transaction). In the latter case, the job
509             that is not required will be removed, or in case both are
510             not required, the unit that conflicts will be started and the
511             unit that is conflicted is stopped.',
512             'type' => 'list'
513             },
514             'Before',
515             {
516             'cargo' => {
517             'type' => 'leaf',
518             'value_type' => 'uniline'
519             },
520             'description' => 'These two settings expect a space-separated list of unit names. They may be specified
521             more than once, in which case dependencies for all listed names are created.
522              
523             Those two settings configure ordering dependencies between units. If unit
524             C<foo.service> contains the setting C<Before=bar.service> and both
525             units are being started, C<bar.service>\'s start-up is delayed until
526             C<foo.service> has finished starting up. C<After> is the inverse
527             of C<Before>, i.e. while C<Before> ensures that the configured unit
528             is started before the listed unit begins starting up, C<After> ensures the opposite,
529             that the listed unit is fully started up before the configured unit is started.
530              
531             When two units with an ordering dependency between them are shut down, the inverse of the
532             start-up order is applied. I.e. if a unit is configured with C<After> on another
533             unit, the former is stopped before the latter if both are shut down. Given two units with any
534             ordering dependency between them, if one unit is shut down and the other is started up, the shutdown
535             is ordered before the start-up. It doesn\'t matter if the ordering dependency is
536             C<After> or C<Before>, in this case. It also doesn\'t matter which
537             of the two is shut down, as long as one is shut down and the other is started up; the shutdown is
538             ordered before the start-up in all cases. If two units have no ordering dependencies between them,
539             they are shut down or started up simultaneously, and no ordering takes place. It depends on the unit
540             type when precisely a unit has finished starting up. Most importantly, for service units start-up is
541             considered completed for the purpose of C<Before>/C<After> when all
542             its configured start-up commands have been invoked and they either failed or reported start-up
543             success. Note that this does includes C<ExecStartPost> (or
544             C<ExecStopPost> for the shutdown case).
545              
546             Note that those settings are independent of and orthogonal to the requirement dependencies as
547             configured by C<Requires>, C<Wants>, C<Requisite>,
548             or C<BindsTo>. It is a common pattern to include a unit name in both the
549             C<After> and C<Wants> options, in which case the unit listed will
550             be started before the unit that is configured with these options.
551              
552             Note that C<Before> dependencies on device units have no effect and are not
553             supported. Devices generally become available as a result of an external hotplug event, and systemd
554             creates the corresponding device unit without delay.',
555             'type' => 'list'
556             },
557             'After',
558             {
559             'cargo' => {
560             'type' => 'leaf',
561             'value_type' => 'uniline'
562             },
563             'description' => 'These two settings expect a space-separated list of unit names. They may be specified
564             more than once, in which case dependencies for all listed names are created.
565              
566             Those two settings configure ordering dependencies between units. If unit
567             C<foo.service> contains the setting C<Before=bar.service> and both
568             units are being started, C<bar.service>\'s start-up is delayed until
569             C<foo.service> has finished starting up. C<After> is the inverse
570             of C<Before>, i.e. while C<Before> ensures that the configured unit
571             is started before the listed unit begins starting up, C<After> ensures the opposite,
572             that the listed unit is fully started up before the configured unit is started.
573              
574             When two units with an ordering dependency between them are shut down, the inverse of the
575             start-up order is applied. I.e. if a unit is configured with C<After> on another
576             unit, the former is stopped before the latter if both are shut down. Given two units with any
577             ordering dependency between them, if one unit is shut down and the other is started up, the shutdown
578             is ordered before the start-up. It doesn\'t matter if the ordering dependency is
579             C<After> or C<Before>, in this case. It also doesn\'t matter which
580             of the two is shut down, as long as one is shut down and the other is started up; the shutdown is
581             ordered before the start-up in all cases. If two units have no ordering dependencies between them,
582             they are shut down or started up simultaneously, and no ordering takes place. It depends on the unit
583             type when precisely a unit has finished starting up. Most importantly, for service units start-up is
584             considered completed for the purpose of C<Before>/C<After> when all
585             its configured start-up commands have been invoked and they either failed or reported start-up
586             success. Note that this does includes C<ExecStartPost> (or
587             C<ExecStopPost> for the shutdown case).
588              
589             Note that those settings are independent of and orthogonal to the requirement dependencies as
590             configured by C<Requires>, C<Wants>, C<Requisite>,
591             or C<BindsTo>. It is a common pattern to include a unit name in both the
592             C<After> and C<Wants> options, in which case the unit listed will
593             be started before the unit that is configured with these options.
594              
595             Note that C<Before> dependencies on device units have no effect and are not
596             supported. Devices generally become available as a result of an external hotplug event, and systemd
597             creates the corresponding device unit without delay.',
598             'type' => 'list'
599             },
600             'OnFailure',
601             {
602             'description' => 'A space-separated list of one or more units that are activated when this unit enters
603             the C<failed> state. A service unit using C<Restart> enters the
604             failed state only after the start limits are reached.',
605             'type' => 'leaf',
606             'value_type' => 'uniline'
607             },
608             'OnSuccess',
609             {
610             'description' => 'A space-separated list of one or more units that are activated when this unit enters
611             the C<inactive> state.',
612             'type' => 'leaf',
613             'value_type' => 'uniline'
614             },
615             'PropagatesReloadTo',
616             {
617             'description' => 'A space-separated list of one or more units to which reload requests from this unit
618             shall be propagated to, or units from which reload requests shall be propagated to this unit,
619             respectively. Issuing a reload request on a unit will automatically also enqueue reload requests on
620             all units that are linked to it using these two settings.',
621             'type' => 'leaf',
622             'value_type' => 'uniline'
623             },
624             'ReloadPropagatedFrom',
625             {
626             'description' => 'A space-separated list of one or more units to which reload requests from this unit
627             shall be propagated to, or units from which reload requests shall be propagated to this unit,
628             respectively. Issuing a reload request on a unit will automatically also enqueue reload requests on
629             all units that are linked to it using these two settings.',
630             'type' => 'leaf',
631             'value_type' => 'uniline'
632             },
633             'PropagatesStopTo',
634             {
635             'description' => 'A space-separated list of one or more units to which stop requests from this unit
636             shall be propagated to, or units from which stop requests shall be propagated to this unit,
637             respectively. Issuing a stop request on a unit will automatically also enqueue stop requests on all
638             units that are linked to it using these two settings.',
639             'type' => 'leaf',
640             'value_type' => 'uniline'
641             },
642             'StopPropagatedFrom',
643             {
644             'description' => 'A space-separated list of one or more units to which stop requests from this unit
645             shall be propagated to, or units from which stop requests shall be propagated to this unit,
646             respectively. Issuing a stop request on a unit will automatically also enqueue stop requests on all
647             units that are linked to it using these two settings.',
648             'type' => 'leaf',
649             'value_type' => 'uniline'
650             },
651             'JoinsNamespaceOf',
652             {
653             'description' => 'For units that start processes (such as service units), lists one or more other units
654             whose network and/or temporary file namespace to join. This only applies to unit types which support
655             the C<PrivateNetwork>, C<NetworkNamespacePath>,
656             C<PrivateIPC>, C<IPCNamespacePath>, and
657             C<PrivateTmp> directives (see
658             L<systemd.exec(5)> for
659             details). If a unit that has this setting set is started, its processes will see the same
660             C</tmp/>, C</var/tmp/>, IPC namespace and network namespace as
661             one listed unit that is started. If multiple listed units are already started, it is not defined
662             which namespace is joined. Note that this setting only has an effect if
663             C<PrivateNetwork>/C<NetworkNamespacePath>,
664             C<PrivateIPC>/C<IPCNamespacePath> and/or
665             C<PrivateTmp> is enabled for both the unit that joins the namespace and the unit
666             whose namespace is joined.',
667             'type' => 'leaf',
668             'value_type' => 'uniline'
669             },
670             'RequiresMountsFor',
671             {
672             'description' => 'Takes a space-separated list of absolute
673             paths. Automatically adds dependencies of type
674             C<Requires> and C<After> for
675             all mount units required to access the specified path.
676              
677             Mount points marked with C<noauto> are not
678             mounted automatically through C<local-fs.target>,
679             but are still honored for the purposes of this option, i.e. they
680             will be pulled in by this unit.',
681             'type' => 'leaf',
682             'value_type' => 'uniline'
683             },
684             'OnFailureJobMode',
685             {
686             'description' => 'Takes a value of
687             C<fail>,
688             C<replace>,
689             C<replace-irreversibly>,
690             C<isolate>,
691             C<flush>,
692             C<ignore-dependencies> or
693             C<ignore-requirements>. Defaults to
694             C<replace>. Specifies how the units listed in
695             C<OnFailure> will be enqueued. See
696             L<systemctl(1)>\'s
697             C<--job-mode=> option for details on the
698             possible values. If this is set to C<isolate>,
699             only a single unit may be listed in
700             C<OnFailure>.',
701             'migrate_from' => {
702             'formula' => '$unit',
703             'variables' => {
704             'unit' => '- OnFailureIsolate'
705             }
706             },
707             'type' => 'leaf',
708             'value_type' => 'uniline'
709             },
710             'IgnoreOnIsolate',
711             {
712             'description' => 'Takes a boolean argument. If C<true>, this unit will not be stopped
713             when isolating another unit. Defaults to C<false> for service, target, socket, timer,
714             and path units, and C<true> for slice, scope, device, swap, mount, and automount
715             units.',
716             'type' => 'leaf',
717             'value_type' => 'boolean',
718             'write_as' => [
719             'no',
720             'yes'
721             ]
722             },
723             'StopWhenUnneeded',
724             {
725             'description' => 'Takes a boolean argument. If
726             C<true>, this unit will be stopped when it is no
727             longer used. Note that, in order to minimize the work to be
728             executed, systemd will not stop units by default unless they
729             are conflicting with other units, or the user explicitly
730             requested their shut down. If this option is set, a unit will
731             be automatically cleaned up if no other active unit requires
732             it. Defaults to C<false>.',
733             'type' => 'leaf',
734             'value_type' => 'boolean',
735             'write_as' => [
736             'no',
737             'yes'
738             ]
739             },
740             'RefuseManualStart',
741             {
742             'description' => 'Takes a boolean argument. If
743             C<true>, this unit can only be activated or
744             deactivated indirectly. In this case, explicit start-up or
745             termination requested by the user is denied, however if it is
746             started or stopped as a dependency of another unit, start-up
747             or termination will succeed. This is mostly a safety feature
748             to ensure that the user does not accidentally activate units
749             that are not intended to be activated explicitly, and not
750             accidentally deactivate units that are not intended to be
751             deactivated. These options default to
752             C<false>.',
753             'type' => 'leaf',
754             'value_type' => 'boolean',
755             'write_as' => [
756             'no',
757             'yes'
758             ]
759             },
760             'RefuseManualStop',
761             {
762             'description' => 'Takes a boolean argument. If
763             C<true>, this unit can only be activated or
764             deactivated indirectly. In this case, explicit start-up or
765             termination requested by the user is denied, however if it is
766             started or stopped as a dependency of another unit, start-up
767             or termination will succeed. This is mostly a safety feature
768             to ensure that the user does not accidentally activate units
769             that are not intended to be activated explicitly, and not
770             accidentally deactivate units that are not intended to be
771             deactivated. These options default to
772             C<false>.',
773             'type' => 'leaf',
774             'value_type' => 'boolean',
775             'write_as' => [
776             'no',
777             'yes'
778             ]
779             },
780             'AllowIsolate',
781             {
782             'description' => 'Takes a boolean argument. If
783             C<true>, this unit may be used with the
784             systemctl isolate command. Otherwise, this
785             will be refused. It probably is a good idea to leave this
786             disabled except for target units that shall be used similar to
787             runlevels in SysV init systems, just as a precaution to avoid
788             unusable system states. This option defaults to
789             C<false>.',
790             'type' => 'leaf',
791             'value_type' => 'boolean',
792             'write_as' => [
793             'no',
794             'yes'
795             ]
796             },
797             'DefaultDependencies',
798             {
799             'description' => 'Takes a boolean argument. If
800             C<yes>, (the default), a few default
801             dependencies will implicitly be created for the unit. The
802             actual dependencies created depend on the unit type. For
803             example, for service units, these dependencies ensure that the
804             service is started only after basic system initialization is
805             completed and is properly terminated on system shutdown. See
806             the respective man pages for details. Generally, only services
807             involved with early boot or late shutdown should set this
808             option to C<no>. It is highly recommended to
809             leave this option enabled for the majority of common units. If
810             set to C<no>, this option does not disable
811             all implicit dependencies, just non-essential
812             ones.',
813             'type' => 'leaf',
814             'value_type' => 'boolean',
815             'write_as' => [
816             'no',
817             'yes'
818             ]
819             },
820             'CollectMode',
821             {
822             'choice' => [
823             'inactive',
824             'inactive-or-failed'
825             ],
826             'description' => "Tweaks the \"garbage collection\" algorithm for this unit. Takes one of C<inactive>
827             or C<inactive-or-failed>. If set to C<inactive> the unit will be unloaded if it is
828             in the C<inactive> state and is not referenced by clients, jobs or other units \x{2014} however it
829             is not unloaded if it is in the C<failed> state. In C<failed> mode, failed
830             units are not unloaded until the user invoked systemctl reset-failed on them to reset the
831             C<failed> state, or an equivalent command. This behaviour is altered if this option is set to
832             C<inactive-or-failed>: in this case the unit is unloaded even if the unit is in a
833             C<failed> state, and thus an explicitly resetting of the C<failed> state is
834             not necessary. Note that if this mode is used unit results (such as exit codes, exit signals, consumed
835             resources, \x{2026}) are flushed out immediately after the unit completed, except for what is stored in the logging
836             subsystem. Defaults to C<inactive>.",
837             'type' => 'leaf',
838             'value_type' => 'enum'
839             },
840             'FailureActionExitStatus',
841             {
842             'description' => "Controls the exit status to propagate back to an invoking container manager (in case of a
843             system service) or service manager (in case of a user manager) when the
844             C<FailureAction>/C<SuccessAction> are set to C<exit> or
845             C<exit-force> and the action is triggered. By default the exit status of the main process of the
846             triggering unit (if this applies) is propagated. Takes a value in the range 0\x{2026}255 or the empty string to
847             request default behaviour.",
848             'type' => 'leaf',
849             'value_type' => 'uniline'
850             },
851             'SuccessActionExitStatus',
852             {
853             'description' => "Controls the exit status to propagate back to an invoking container manager (in case of a
854             system service) or service manager (in case of a user manager) when the
855             C<FailureAction>/C<SuccessAction> are set to C<exit> or
856             C<exit-force> and the action is triggered. By default the exit status of the main process of the
857             triggering unit (if this applies) is propagated. Takes a value in the range 0\x{2026}255 or the empty string to
858             request default behaviour.",
859             'type' => 'leaf',
860             'value_type' => 'uniline'
861             },
862             'JobTimeoutSec',
863             {
864             'description' => 'C<JobTimeoutSec> specifies a timeout for the whole job that starts
865             running when the job is queued. C<JobRunningTimeoutSec> specifies a timeout that
866             starts running when the queued job is actually started. If either limit is reached, the job will be
867             cancelled, the unit however will not change state or even enter the C<failed> mode.
868              
869             Both settings take a time span with the default unit of seconds, but other units may be
870             specified, see
871             L<systemd.time(5)>.
872             The default is C<infinity> (job timeouts disabled), except for device units where
873             C<JobRunningTimeoutSec> defaults to C<DefaultTimeoutStartSec>.
874              
875             Note: these timeouts are independent from any unit-specific timeouts (for example, the timeout
876             set with C<TimeoutStartSec> in service units). The job timeout has no effect on the
877             unit itself. Or in other words: unit-specific timeouts are useful to abort unit state changes, and
878             revert them. The job timeout set with this option however is useful to abort only the job waiting for
879             the unit state to change.',
880             'type' => 'leaf',
881             'value_type' => 'uniline'
882             },
883             'JobRunningTimeoutSec',
884             {
885             'description' => 'C<JobTimeoutSec> specifies a timeout for the whole job that starts
886             running when the job is queued. C<JobRunningTimeoutSec> specifies a timeout that
887             starts running when the queued job is actually started. If either limit is reached, the job will be
888             cancelled, the unit however will not change state or even enter the C<failed> mode.
889              
890             Both settings take a time span with the default unit of seconds, but other units may be
891             specified, see
892             L<systemd.time(5)>.
893             The default is C<infinity> (job timeouts disabled), except for device units where
894             C<JobRunningTimeoutSec> defaults to C<DefaultTimeoutStartSec>.
895              
896             Note: these timeouts are independent from any unit-specific timeouts (for example, the timeout
897             set with C<TimeoutStartSec> in service units). The job timeout has no effect on the
898             unit itself. Or in other words: unit-specific timeouts are useful to abort unit state changes, and
899             revert them. The job timeout set with this option however is useful to abort only the job waiting for
900             the unit state to change.',
901             'type' => 'leaf',
902             'value_type' => 'uniline'
903             },
904             'JobTimeoutAction',
905             {
906             'description' => 'C<JobTimeoutAction> optionally configures an additional action to
907             take when the timeout is hit, see description of C<JobTimeoutSec> and
908             C<JobRunningTimeoutSec> above. It takes the same values as
909             C<StartLimitAction>. Defaults to C<none>.
910              
911             C<JobTimeoutRebootArgument> configures an optional reboot string to pass to
912             the L<reboot(2)> system
913             call.',
914             'type' => 'leaf',
915             'value_type' => 'uniline'
916             },
917             'JobTimeoutRebootArgument',
918             {
919             'description' => 'C<JobTimeoutAction> optionally configures an additional action to
920             take when the timeout is hit, see description of C<JobTimeoutSec> and
921             C<JobRunningTimeoutSec> above. It takes the same values as
922             C<StartLimitAction>. Defaults to C<none>.
923              
924             C<JobTimeoutRebootArgument> configures an optional reboot string to pass to
925             the L<reboot(2)> system
926             call.',
927             'type' => 'leaf',
928             'value_type' => 'uniline'
929             },
930             'StartLimitAction',
931             {
932             'choice' => [
933             'none',
934             'reboot',
935             'reboot-force',
936             'reboot-immediate',
937             'poweroff',
938             'poweroff-force',
939             'poweroff-immediate',
940             'exit',
941             'exit-force'
942             ],
943             'description' => 'Configure an additional action to take if the rate limit configured with
944             C<StartLimitIntervalSec> and C<StartLimitBurst> is hit. Takes the same
945             values as the C<FailureAction>/C<SuccessAction> settings. If
946             C<none> is set, hitting the rate limit will trigger no action except that
947             the start will not be permitted. Defaults to C<none>.',
948             'type' => 'leaf',
949             'value_type' => 'enum'
950             },
951             'SourcePath',
952             {
953             'description' => 'A path to a configuration file this unit has
954             been generated from. This is primarily useful for
955             implementation of generator tools that convert configuration
956             from an external configuration file format into native unit
957             files. This functionality should not be used in normal
958             units.',
959             'type' => 'leaf',
960             'value_type' => 'uniline'
961             },
962             'ConditionArchitecture',
963             {
964             'cargo' => {
965             'choice' => [
966             'x86',
967             'x86-64',
968             'ppc',
969             'ppc-le',
970             'ppc64',
971             'ppc64-le',
972             'ia64',
973             'parisc',
974             'parisc64',
975             's390',
976             's390x',
977             'sparc',
978             'sparc64',
979             'mips',
980             'mips-le',
981             'mips64',
982             'mips64-le',
983             'alpha',
984             'arm',
985             'arm-be',
986             'arm64',
987             'arm64-be',
988             'sh',
989             'sh64',
990             'm68k',
991             'tilegx',
992             'cris',
993             'arc',
994             'arc-be',
995             'native'
996             ],
997             'type' => 'leaf',
998             'value_type' => 'enum'
999             },
1000             'description' => 'Check whether the system is running on a specific architecture. Takes one of
1001             C<x86>,
1002             C<x86-64>,
1003             C<ppc>,
1004             C<ppc-le>,
1005             C<ppc64>,
1006             C<ppc64-le>,
1007             C<ia64>,
1008             C<parisc>,
1009             C<parisc64>,
1010             C<s390>,
1011             C<s390x>,
1012             C<sparc>,
1013             C<sparc64>,
1014             C<mips>,
1015             C<mips-le>,
1016             C<mips64>,
1017             C<mips64-le>,
1018             C<alpha>,
1019             C<arm>,
1020             C<arm-be>,
1021             C<arm64>,
1022             C<arm64-be>,
1023             C<sh>,
1024             C<sh64>,
1025             C<m68k>,
1026             C<tilegx>,
1027             C<cris>,
1028             C<arc>,
1029             C<arc-be>, or
1030             C<native>.
1031              
1032             The architecture is determined from the information returned by
1033             L<uname(2)>
1034             and is thus subject to
1035             L<personality(2)>.
1036             Note that a C<Personality> setting in the same unit file has no effect on this
1037             condition. A special architecture name C<native> is mapped to the architecture the
1038             system manager itself is compiled for. The test may be negated by prepending an exclamation
1039             mark.',
1040             'type' => 'list'
1041             },
1042             'ConditionFirmware',
1043             {
1044             'cargo' => {
1045             'type' => 'leaf',
1046             'value_type' => 'uniline'
1047             },
1048             'description' => 'Check whether the system\'s firmware is of a certain type. The following values are
1049             possible:',
1050             'type' => 'list'
1051             },
1052             'ConditionVirtualization',
1053             {
1054             'cargo' => {
1055             'type' => 'leaf',
1056             'value_type' => 'uniline'
1057             },
1058             'description' => 'Check whether the system is executed in a virtualized environment and optionally
1059             test whether it is a specific implementation. Takes either boolean value to check if being executed
1060             in any virtualized environment, or one of
1061             C<vm> and
1062             C<container> to test against a generic type of virtualization solution, or one of
1063             C<qemu>,
1064             C<kvm>,
1065             C<amazon>,
1066             C<zvm>,
1067             C<vmware>,
1068             C<microsoft>,
1069             C<oracle>,
1070             C<powervm>,
1071             C<xen>,
1072             C<bochs>,
1073             C<uml>,
1074             C<bhyve>,
1075             C<qnx>,
1076             C<apple>,
1077             C<openvz>,
1078             C<lxc>,
1079             C<lxc-libvirt>,
1080             C<systemd-nspawn>,
1081             C<docker>,
1082             C<podman>,
1083             C<rkt>,
1084             C<wsl>,
1085             C<proot>,
1086             C<pouch>,
1087             C<acrn> to test
1088             against a specific implementation, or
1089             C<private-users> to check whether we are running in a user namespace. See
1090             L<systemd-detect-virt(1)>
1091             for a full list of known virtualization technologies and their identifiers. If multiple
1092             virtualization technologies are nested, only the innermost is considered. The test may be negated
1093             by prepending an exclamation mark.',
1094             'type' => 'list'
1095             },
1096             'ConditionHost',
1097             {
1098             'cargo' => {
1099             'type' => 'leaf',
1100             'value_type' => 'uniline'
1101             },
1102             'description' => 'C<ConditionHost> may be used to match against the hostname or
1103             machine ID of the host. This either takes a hostname string (optionally with shell style globs)
1104             which is tested against the locally set hostname as returned by
1105             L<gethostname(2)>, or
1106             a machine ID formatted as string (see
1107             L<machine-id(5)>).
1108             The test may be negated by prepending an exclamation mark.',
1109             'type' => 'list'
1110             },
1111             'ConditionKernelCommandLine',
1112             {
1113             'cargo' => {
1114             'type' => 'leaf',
1115             'value_type' => 'uniline'
1116             },
1117             'description' => "C<ConditionKernelCommandLine> may be used to check whether a
1118             specific kernel command line option is set (or if prefixed with the exclamation mark \x{2014} unset). The
1119             argument must either be a single word, or an assignment (i.e. two words, separated by
1120             C<=>). In the former case the kernel command line is searched for the word
1121             appearing as is, or as left hand side of an assignment. In the latter case, the exact assignment is
1122             looked for with right and left hand side matching. This operates on the kernel command line
1123             communicated to userspace via C</proc/cmdline>, except when the service manager
1124             is invoked as payload of a container manager, in which case the command line of C<PID
1125             1> is used instead (i.e. C</proc/1/cmdline>).",
1126             'type' => 'list'
1127             },
1128             'ConditionKernelVersion',
1129             {
1130             'cargo' => {
1131             'type' => 'leaf',
1132             'value_type' => 'uniline'
1133             },
1134             'description' => 'C<ConditionKernelVersion> may be used to check whether the kernel
1135             version (as reported by uname -r) matches a certain expression, or if prefixed
1136             with the exclamation mark, does not match. The argument must be a list of (potentially quoted)
1137             expressions. Each expression starts with one of C<=> or C<!=> for
1138             string comparisons, C<< < >>, C<< <= >>, C<==>,
1139             C<< <> >>, C<< >= >>, C<< > >> for version
1140             comparisons, or C<$=>, C<!$=> for a shell-style glob match. If no
1141             operator is specified, C<$=> is implied.
1142              
1143             Note that using the kernel version string is an unreliable way to determine which features
1144             are supported by a kernel, because of the widespread practice of backporting drivers, features, and
1145             fixes from newer upstream kernels into older versions provided by distributions. Hence, this check
1146             is inherently unportable and should not be used for units which may be used on different
1147             distributions.',
1148             'type' => 'list'
1149             },
1150             'ConditionCredential',
1151             {
1152             'cargo' => {
1153             'type' => 'leaf',
1154             'value_type' => 'uniline'
1155             },
1156             'description' => 'C<ConditionCredential> may be used to check whether a credential
1157             by the specified name was passed into the service manager. See L<System and Service Credentials|https://systemd.io/CREDENTIALS> for details about
1158             credentials. If used in services for the system service manager this may be used to conditionalize
1159             services based on system credentials passed in. If used in services for the per-user service
1160             manager this may be used to conditionalize services based on credentials passed into the
1161             C<unit@.service> service instance belonging to the user. The argument must be a
1162             valid credential name.',
1163             'type' => 'list'
1164             },
1165             'ConditionEnvironment',
1166             {
1167             'cargo' => {
1168             'type' => 'leaf',
1169             'value_type' => 'uniline'
1170             },
1171             'description' => "C<ConditionEnvironment> may be used to check whether a specific
1172             environment variable is set (or if prefixed with the exclamation mark \x{2014} unset) in the service
1173             manager's environment block.
1174             The argument may be a single word, to check if the variable with this name is defined in the
1175             environment block, or an assignment
1176             (C<name=value>), to check if
1177             the variable with this exact value is defined. Note that the environment block of the service
1178             manager itself is checked, i.e. not any variables defined with C<Environment> or
1179             C<EnvironmentFile>, as described above. This is particularly useful when the
1180             service manager runs inside a containerized environment or as per-user service manager, in order to
1181             check for variables passed in by the enclosing container manager or PAM.",
1182             'type' => 'list'
1183             },
1184             'ConditionSecurity',
1185             {
1186             'cargo' => {
1187             'type' => 'leaf',
1188             'value_type' => 'uniline'
1189             },
1190             'description' => 'C<ConditionSecurity> may be used to check whether the given
1191             security technology is enabled on the system. Currently, the recognized values are
1192             C<selinux>, C<apparmor>, C<tomoyo>,
1193             C<ima>, C<smack>, C<audit>,
1194             C<uefi-secureboot> and C<tpm2>. The test may be negated by prepending
1195             an exclamation mark.',
1196             'type' => 'list'
1197             },
1198             'ConditionCapability',
1199             {
1200             'cargo' => {
1201             'type' => 'leaf',
1202             'value_type' => 'uniline'
1203             },
1204             'description' => 'Check whether the given capability exists in the capability bounding set of the
1205             service manager (i.e. this does not check whether capability is actually available in the permitted
1206             or effective sets, see
1207             L<capabilities(7)>
1208             for details). Pass a capability name such as C<CAP_MKNOD>, possibly prefixed with
1209             an exclamation mark to negate the check.',
1210             'type' => 'list'
1211             },
1212             'ConditionACPower',
1213             {
1214             'cargo' => {
1215             'type' => 'leaf',
1216             'value_type' => 'uniline'
1217             },
1218             'description' => 'Check whether the system has AC power, or is exclusively battery powered at the
1219             time of activation of the unit. This takes a boolean argument. If set to C<true>,
1220             the condition will hold only if at least one AC connector of the system is connected to a power
1221             source, or if no AC connectors are known. Conversely, if set to C<false>, the
1222             condition will hold only if there is at least one AC connector known and all AC connectors are
1223             disconnected from a power source.',
1224             'type' => 'list'
1225             },
1226             'ConditionNeedsUpdate',
1227             {
1228             'cargo' => {
1229             'choice' => [
1230             '/var/',
1231             '/etc/',
1232             '!/var/',
1233             '!/etc/'
1234             ],
1235             'type' => 'leaf',
1236             'value_type' => 'enum'
1237             },
1238             'description' => 'Takes one of C</var/> or C</etc/> as argument,
1239             possibly prefixed with a C<!> (to invert the condition). This condition may be
1240             used to conditionalize units on whether the specified directory requires an update because
1241             C</usr/>\'s modification time is newer than the stamp file
1242             C<.updated> in the specified directory. This is useful to implement offline
1243             updates of the vendor operating system resources in C</usr/> that require updating
1244             of C</etc/> or C</var/> on the next following boot. Units making
1245             use of this condition should order themselves before
1246             L<systemd-update-done.service(8)>,
1247             to make sure they run before the stamp file\'s modification time gets reset indicating a completed
1248             update.
1249              
1250             If the C<systemd.condition-needs-update=> option is specified on the kernel
1251             command line (taking a boolean), it will override the result of this condition check, taking
1252             precedence over any file modification time checks. If the kernel command line option is used,
1253             C<systemd-update-done.service> will not have immediate effect on any following
1254             C<ConditionNeedsUpdate> checks, until the system is rebooted where the kernel
1255             command line option is not specified anymore.
1256              
1257             Note that to make this scheme effective, the timestamp of C</usr/> should
1258             be explicitly updated after its contents are modified. The kernel will automatically update
1259             modification timestamp on a directory only when immediate children of a directory are modified; an
1260             modification of nested files will not automatically result in mtime of C</usr/>
1261             being updated.
1262              
1263             Also note that if the update method includes a call to execute appropriate post-update steps
1264             itself, it should not touch the timestamp of C</usr/>. In a typical distribution
1265             packaging scheme, packages will do any required update steps as part of the installation or
1266             upgrade, to make package contents immediately usable. C<ConditionNeedsUpdate>
1267             should be used with other update mechanisms where such an immediate update does not
1268             happen.',
1269             'type' => 'list'
1270             },
1271             'ConditionFirstBoot',
1272             {
1273             'cargo' => {
1274             'type' => 'leaf',
1275             'value_type' => 'boolean',
1276             'write_as' => [
1277             'no',
1278             'yes'
1279             ]
1280             },
1281             'description' => 'Takes a boolean argument. This condition may be used to conditionalize units on
1282             whether the system is booting up for the first time. This roughly means that C</etc/>
1283             was unpopulated when the system started booting (for details, see "First Boot Semantics" in
1284             L<machine-id(5)>).
1285             First boot is considered finished (this condition will evaluate as false) after the manager
1286             has finished the startup phase.
1287              
1288             This condition may be used to populate C</etc/> on the first boot after
1289             factory reset, or when a new system instance boots up for the first time.
1290              
1291             For robustness, units with C<ConditionFirstBoot=yes> should order themselves
1292             before C<first-boot-complete.target> and pull in this passive target with
1293             C<Wants>. This ensures that in a case of an aborted first boot, these units will
1294             be re-run during the next system startup.
1295              
1296             If the C<systemd.condition-first-boot=> option is specified on the kernel
1297             command line (taking a boolean), it will override the result of this condition check, taking
1298             precedence over C</etc/machine-id> existence checks.',
1299             'type' => 'list'
1300             },
1301             'ConditionPathExists',
1302             {
1303             'cargo' => {
1304             'type' => 'leaf',
1305             'value_type' => 'uniline'
1306             },
1307             'description' => 'Check for the existence of a file. If the specified absolute path name does not exist,
1308             the condition will fail. If the absolute path name passed to
1309             C<ConditionPathExists> is prefixed with an exclamation mark
1310             (C<!>), the test is negated, and the unit is only started if the path does not
1311             exist.',
1312             'type' => 'list'
1313             },
1314             'ConditionPathExistsGlob',
1315             {
1316             'cargo' => {
1317             'type' => 'leaf',
1318             'value_type' => 'uniline'
1319             },
1320             'description' => 'C<ConditionPathExistsGlob> is similar to
1321             C<ConditionPathExists>, but checks for the existence of at least one file or
1322             directory matching the specified globbing pattern.',
1323             'type' => 'list'
1324             },
1325             'ConditionPathIsDirectory',
1326             {
1327             'cargo' => {
1328             'type' => 'leaf',
1329             'value_type' => 'uniline'
1330             },
1331             'description' => 'C<ConditionPathIsDirectory> is similar to
1332             C<ConditionPathExists> but verifies that a certain path exists and is a
1333             directory.',
1334             'type' => 'list'
1335             },
1336             'ConditionPathIsSymbolicLink',
1337             {
1338             'cargo' => {
1339             'type' => 'leaf',
1340             'value_type' => 'uniline'
1341             },
1342             'description' => 'C<ConditionPathIsSymbolicLink> is similar to
1343             C<ConditionPathExists> but verifies that a certain path exists and is a symbolic
1344             link.',
1345             'type' => 'list'
1346             },
1347             'ConditionPathIsMountPoint',
1348             {
1349             'cargo' => {
1350             'type' => 'leaf',
1351             'value_type' => 'uniline'
1352             },
1353             'description' => 'C<ConditionPathIsMountPoint> is similar to
1354             C<ConditionPathExists> but verifies that a certain path exists and is a mount
1355             point.',
1356             'type' => 'list'
1357             },
1358             'ConditionPathIsReadWrite',
1359             {
1360             'cargo' => {
1361             'type' => 'leaf',
1362             'value_type' => 'uniline'
1363             },
1364             'description' => 'C<ConditionPathIsReadWrite> is similar to
1365             C<ConditionPathExists> but verifies that the underlying file system is readable
1366             and writable (i.e. not mounted read-only).',
1367             'type' => 'list'
1368             },
1369             'ConditionPathIsEncrypted',
1370             {
1371             'cargo' => {
1372             'type' => 'leaf',
1373             'value_type' => 'uniline'
1374             },
1375             'description' => 'C<ConditionPathIsEncrypted> is similar to
1376             C<ConditionPathExists> but verifies that the underlying file system\'s backing
1377             block device is encrypted using dm-crypt/LUKS. Note that this check does not cover ext4
1378             per-directory encryption, and only detects block level encryption. Moreover, if the specified path
1379             resides on a file system on top of a loopback block device, only encryption above the loopback device is
1380             detected. It is not detected whether the file system backing the loopback block device is encrypted.',
1381             'type' => 'list'
1382             },
1383             'ConditionDirectoryNotEmpty',
1384             {
1385             'cargo' => {
1386             'type' => 'leaf',
1387             'value_type' => 'uniline'
1388             },
1389             'description' => 'C<ConditionDirectoryNotEmpty> is similar to
1390             C<ConditionPathExists> but verifies that a certain path exists and is a non-empty
1391             directory.',
1392             'type' => 'list'
1393             },
1394             'ConditionFileNotEmpty',
1395             {
1396             'cargo' => {
1397             'type' => 'leaf',
1398             'value_type' => 'uniline'
1399             },
1400             'description' => 'C<ConditionFileNotEmpty> is similar to
1401             C<ConditionPathExists> but verifies that a certain path exists and refers to a
1402             regular file with a non-zero size.',
1403             'type' => 'list'
1404             },
1405             'ConditionFileIsExecutable',
1406             {
1407             'cargo' => {
1408             'type' => 'leaf',
1409             'value_type' => 'uniline'
1410             },
1411             'description' => 'C<ConditionFileIsExecutable> is similar to
1412             C<ConditionPathExists> but verifies that a certain path exists, is a regular file,
1413             and marked executable.',
1414             'type' => 'list'
1415             },
1416             'ConditionUser',
1417             {
1418             'cargo' => {
1419             'type' => 'leaf',
1420             'value_type' => 'uniline'
1421             },
1422             'description' => 'C<ConditionUser> takes a numeric C<UID>, a UNIX
1423             user name, or the special value C<@system>. This condition may be used to check
1424             whether the service manager is running as the given user. The special value
1425             C<@system> can be used to check if the user id is within the system user
1426             range. This option is not useful for system services, as the system manager exclusively runs as the
1427             root user, and thus the test result is constant.',
1428             'type' => 'list'
1429             },
1430             'ConditionGroup',
1431             {
1432             'cargo' => {
1433             'type' => 'leaf',
1434             'value_type' => 'uniline'
1435             },
1436             'description' => 'C<ConditionGroup> is similar to C<ConditionUser>
1437             but verifies that the service manager\'s real or effective group, or any of its auxiliary groups,
1438             match the specified group or GID. This setting does not support the special value
1439             C<@system>.',
1440             'type' => 'list'
1441             },
1442             'ConditionControlGroupController',
1443             {
1444             'cargo' => {
1445             'type' => 'leaf',
1446             'value_type' => 'uniline'
1447             },
1448             'description' => 'Check whether given cgroup controllers (e.g. C<cpu>) are available
1449             for use on the system.
1450              
1451             Multiple controllers may be passed with a space separating them; in this case the condition
1452             will only pass if all listed controllers are available for use. Controllers unknown to systemd are
1453             ignored. Valid controllers are C<cpu>, C<cpuset>,
1454             C<io>, C<memory>, and C<pids>. Even if available in
1455             the kernel, a particular controller may not be available if it was disabled on the kernel command
1456             line with C<cgroup_disable=controller>.',
1457             'type' => 'list'
1458             },
1459             'ConditionMemory',
1460             {
1461             'cargo' => {
1462             'type' => 'leaf',
1463             'value_type' => 'uniline'
1464             },
1465             'description' => 'Verify that the specified amount of system memory is available to the current
1466             system. Takes a memory size in bytes as argument, optionally prefixed with a comparison operator
1467             C<< < >>, C<< <= >>, C<=> (or C<==>),
1468             C<!=> (or C<< <> >>), C<< >= >>,
1469             C<< > >>. On bare-metal systems compares the amount of physical memory in the system
1470             with the specified size, adhering to the specified comparison operator. In containers compares the
1471             amount of memory assigned to the container instead.',
1472             'type' => 'list'
1473             },
1474             'ConditionCPUs',
1475             {
1476             'cargo' => {
1477             'type' => 'leaf',
1478             'value_type' => 'uniline'
1479             },
1480             'description' => 'Verify that the specified number of CPUs is available to the current system. Takes
1481             a number of CPUs as argument, optionally prefixed with a comparison operator
1482             C<< < >>, C<< <= >>, C<=> (or C<==>),
1483             C<!=> (or C<< <> >>), C<< >= >>,
1484             C<< > >>. Compares the number of CPUs in the CPU affinity mask configured of the
1485             service manager itself with the specified number, adhering to the specified comparison operator. On
1486             physical systems the number of CPUs in the affinity mask of the service manager usually matches the
1487             number of physical CPUs, but in special and virtual environments might differ. In particular, in
1488             containers the affinity mask usually matches the number of CPUs assigned to the container and not
1489             the physically available ones.',
1490             'type' => 'list'
1491             },
1492             'ConditionCPUFeature',
1493             {
1494             'cargo' => {
1495             'type' => 'leaf',
1496             'value_type' => 'uniline'
1497             },
1498             'description' => 'Verify that a given CPU feature is available via the C<CPUID>
1499             instruction. This condition only does something on i386 and x86-64 processors. On other
1500             processors it is assumed that the CPU does not support the given feature. It checks the leaves
1501             C<1>, C<7>, C<0x80000001>, and
1502             C<0x80000007>. Valid values are:
1503             C<fpu>,
1504             C<vme>,
1505             C<de>,
1506             C<pse>,
1507             C<tsc>,
1508             C<msr>,
1509             C<pae>,
1510             C<mce>,
1511             C<cx8>,
1512             C<apic>,
1513             C<sep>,
1514             C<mtrr>,
1515             C<pge>,
1516             C<mca>,
1517             C<cmov>,
1518             C<pat>,
1519             C<pse36>,
1520             C<clflush>,
1521             C<mmx>,
1522             C<fxsr>,
1523             C<sse>,
1524             C<sse2>,
1525             C<ht>,
1526             C<pni>,
1527             C<pclmul>,
1528             C<monitor>,
1529             C<ssse3>,
1530             C<fma3>,
1531             C<cx16>,
1532             C<sse4_1>,
1533             C<sse4_2>,
1534             C<movbe>,
1535             C<popcnt>,
1536             C<aes>,
1537             C<xsave>,
1538             C<osxsave>,
1539             C<avx>,
1540             C<f16c>,
1541             C<rdrand>,
1542             C<bmi1>,
1543             C<avx2>,
1544             C<bmi2>,
1545             C<rdseed>,
1546             C<adx>,
1547             C<sha_ni>,
1548             C<syscall>,
1549             C<rdtscp>,
1550             C<lm>,
1551             C<lahf_lm>,
1552             C<abm>,
1553             C<constant_tsc>.',
1554             'type' => 'list'
1555             },
1556             'ConditionOSRelease',
1557             {
1558             'cargo' => {
1559             'type' => 'leaf',
1560             'value_type' => 'uniline'
1561             },
1562             'description' => 'Verify that a specific C<key=value> pair is set in the host\'s
1563             L<os-release(5)>.
1564              
1565             Other than exact string matching (with C<=> and C<!=>),
1566             relative comparisons are supported for versioned parameters (e.g. C<VERSION_ID>;
1567             with C<< < >>, C<< <= >>, C<==>,
1568             C<< <> >>, C<< >= >>, C<< > >>), and shell-style
1569             wildcard comparisons (C<*>, C<?>, C<[]>) are
1570             supported with the C<$=> (match) and C<!$=> (non-match).',
1571             'type' => 'list'
1572             },
1573             'ConditionMemoryPressure',
1574             {
1575             'cargo' => {
1576             'type' => 'leaf',
1577             'value_type' => 'uniline'
1578             },
1579             'description' => 'Verify that the overall system (memory, CPU or IO) pressure is below or equal to a threshold.
1580             This setting takes a threshold value as argument. It can be specified as a simple percentage value,
1581             suffixed with C<%>, in which case the pressure will be measured as an average over the last
1582             five minutes before the attempt to start the unit is performed.
1583             Alternatively, the average timespan can also be specified using C</> as a separator, for
1584             example: C<10%/1min>. The supported timespans match what the kernel provides, and are
1585             limited to C<10sec>, C<1min> and C<5min>. The
1586             C<full> PSI will be checked first, and if not found C<some> will be
1587             checked. For more details, see the documentation on L<PSI (Pressure Stall Information)
1588             |https://docs.kernel.org/accounting/psi.html>.
1589              
1590             Optionally, the threshold value can be prefixed with the slice unit under which the pressure will be checked,
1591             followed by a C<:>. If the slice unit is not specified, the overall system pressure will be measured,
1592             instead of a particular cgroup\'s.',
1593             'type' => 'list'
1594             },
1595             'ConditionCPUPressure',
1596             {
1597             'cargo' => {
1598             'type' => 'leaf',
1599             'value_type' => 'uniline'
1600             },
1601             'description' => 'Verify that the overall system (memory, CPU or IO) pressure is below or equal to a threshold.
1602             This setting takes a threshold value as argument. It can be specified as a simple percentage value,
1603             suffixed with C<%>, in which case the pressure will be measured as an average over the last
1604             five minutes before the attempt to start the unit is performed.
1605             Alternatively, the average timespan can also be specified using C</> as a separator, for
1606             example: C<10%/1min>. The supported timespans match what the kernel provides, and are
1607             limited to C<10sec>, C<1min> and C<5min>. The
1608             C<full> PSI will be checked first, and if not found C<some> will be
1609             checked. For more details, see the documentation on L<PSI (Pressure Stall Information)
1610             |https://docs.kernel.org/accounting/psi.html>.
1611              
1612             Optionally, the threshold value can be prefixed with the slice unit under which the pressure will be checked,
1613             followed by a C<:>. If the slice unit is not specified, the overall system pressure will be measured,
1614             instead of a particular cgroup\'s.',
1615             'type' => 'list'
1616             },
1617             'ConditionIOPressure',
1618             {
1619             'cargo' => {
1620             'type' => 'leaf',
1621             'value_type' => 'uniline'
1622             },
1623             'description' => 'Verify that the overall system (memory, CPU or IO) pressure is below or equal to a threshold.
1624             This setting takes a threshold value as argument. It can be specified as a simple percentage value,
1625             suffixed with C<%>, in which case the pressure will be measured as an average over the last
1626             five minutes before the attempt to start the unit is performed.
1627             Alternatively, the average timespan can also be specified using C</> as a separator, for
1628             example: C<10%/1min>. The supported timespans match what the kernel provides, and are
1629             limited to C<10sec>, C<1min> and C<5min>. The
1630             C<full> PSI will be checked first, and if not found C<some> will be
1631             checked. For more details, see the documentation on L<PSI (Pressure Stall Information)
1632             |https://docs.kernel.org/accounting/psi.html>.
1633              
1634             Optionally, the threshold value can be prefixed with the slice unit under which the pressure will be checked,
1635             followed by a C<:>. If the slice unit is not specified, the overall system pressure will be measured,
1636             instead of a particular cgroup\'s.',
1637             'type' => 'list'
1638             },
1639             'AssertArchitecture',
1640             {
1641             'description' => "Similar to the C<ConditionArchitecture>,
1642             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1643             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1644             assertion setting that is not met results in failure of the start job (which means this is logged
1645             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1646             C<failed> state (or in fact result in any state change of the unit), it affects
1647             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1648             requirements are not met, and when this is something the administrator or user should look
1649             into.",
1650             'type' => 'leaf',
1651             'value_type' => 'uniline'
1652             },
1653             'AssertVirtualization',
1654             {
1655             'description' => "Similar to the C<ConditionArchitecture>,
1656             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1657             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1658             assertion setting that is not met results in failure of the start job (which means this is logged
1659             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1660             C<failed> state (or in fact result in any state change of the unit), it affects
1661             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1662             requirements are not met, and when this is something the administrator or user should look
1663             into.",
1664             'type' => 'leaf',
1665             'value_type' => 'uniline'
1666             },
1667             'AssertHost',
1668             {
1669             'description' => "Similar to the C<ConditionArchitecture>,
1670             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1671             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1672             assertion setting that is not met results in failure of the start job (which means this is logged
1673             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1674             C<failed> state (or in fact result in any state change of the unit), it affects
1675             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1676             requirements are not met, and when this is something the administrator or user should look
1677             into.",
1678             'type' => 'leaf',
1679             'value_type' => 'uniline'
1680             },
1681             'AssertKernelCommandLine',
1682             {
1683             'description' => "Similar to the C<ConditionArchitecture>,
1684             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1685             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1686             assertion setting that is not met results in failure of the start job (which means this is logged
1687             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1688             C<failed> state (or in fact result in any state change of the unit), it affects
1689             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1690             requirements are not met, and when this is something the administrator or user should look
1691             into.",
1692             'type' => 'leaf',
1693             'value_type' => 'uniline'
1694             },
1695             'AssertKernelVersion',
1696             {
1697             'description' => "Similar to the C<ConditionArchitecture>,
1698             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1699             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1700             assertion setting that is not met results in failure of the start job (which means this is logged
1701             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1702             C<failed> state (or in fact result in any state change of the unit), it affects
1703             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1704             requirements are not met, and when this is something the administrator or user should look
1705             into.",
1706             'type' => 'leaf',
1707             'value_type' => 'uniline'
1708             },
1709             'AssertCredential',
1710             {
1711             'description' => "Similar to the C<ConditionArchitecture>,
1712             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1713             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1714             assertion setting that is not met results in failure of the start job (which means this is logged
1715             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1716             C<failed> state (or in fact result in any state change of the unit), it affects
1717             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1718             requirements are not met, and when this is something the administrator or user should look
1719             into.",
1720             'type' => 'leaf',
1721             'value_type' => 'uniline'
1722             },
1723             'AssertEnvironment',
1724             {
1725             'description' => "Similar to the C<ConditionArchitecture>,
1726             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1727             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1728             assertion setting that is not met results in failure of the start job (which means this is logged
1729             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1730             C<failed> state (or in fact result in any state change of the unit), it affects
1731             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1732             requirements are not met, and when this is something the administrator or user should look
1733             into.",
1734             'type' => 'leaf',
1735             'value_type' => 'uniline'
1736             },
1737             'AssertSecurity',
1738             {
1739             'description' => "Similar to the C<ConditionArchitecture>,
1740             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1741             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1742             assertion setting that is not met results in failure of the start job (which means this is logged
1743             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1744             C<failed> state (or in fact result in any state change of the unit), it affects
1745             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1746             requirements are not met, and when this is something the administrator or user should look
1747             into.",
1748             'type' => 'leaf',
1749             'value_type' => 'uniline'
1750             },
1751             'AssertCapability',
1752             {
1753             'description' => "Similar to the C<ConditionArchitecture>,
1754             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1755             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1756             assertion setting that is not met results in failure of the start job (which means this is logged
1757             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1758             C<failed> state (or in fact result in any state change of the unit), it affects
1759             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1760             requirements are not met, and when this is something the administrator or user should look
1761             into.",
1762             'type' => 'leaf',
1763             'value_type' => 'uniline'
1764             },
1765             'AssertACPower',
1766             {
1767             'description' => "Similar to the C<ConditionArchitecture>,
1768             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1769             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1770             assertion setting that is not met results in failure of the start job (which means this is logged
1771             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1772             C<failed> state (or in fact result in any state change of the unit), it affects
1773             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1774             requirements are not met, and when this is something the administrator or user should look
1775             into.",
1776             'type' => 'leaf',
1777             'value_type' => 'uniline'
1778             },
1779             'AssertNeedsUpdate',
1780             {
1781             'description' => "Similar to the C<ConditionArchitecture>,
1782             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1783             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1784             assertion setting that is not met results in failure of the start job (which means this is logged
1785             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1786             C<failed> state (or in fact result in any state change of the unit), it affects
1787             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1788             requirements are not met, and when this is something the administrator or user should look
1789             into.",
1790             'type' => 'leaf',
1791             'value_type' => 'uniline'
1792             },
1793             'AssertFirstBoot',
1794             {
1795             'description' => "Similar to the C<ConditionArchitecture>,
1796             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1797             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1798             assertion setting that is not met results in failure of the start job (which means this is logged
1799             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1800             C<failed> state (or in fact result in any state change of the unit), it affects
1801             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1802             requirements are not met, and when this is something the administrator or user should look
1803             into.",
1804             'type' => 'leaf',
1805             'value_type' => 'uniline'
1806             },
1807             'AssertPathExists',
1808             {
1809             'description' => "Similar to the C<ConditionArchitecture>,
1810             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1811             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1812             assertion setting that is not met results in failure of the start job (which means this is logged
1813             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1814             C<failed> state (or in fact result in any state change of the unit), it affects
1815             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1816             requirements are not met, and when this is something the administrator or user should look
1817             into.",
1818             'type' => 'leaf',
1819             'value_type' => 'uniline'
1820             },
1821             'AssertPathExistsGlob',
1822             {
1823             'description' => "Similar to the C<ConditionArchitecture>,
1824             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1825             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1826             assertion setting that is not met results in failure of the start job (which means this is logged
1827             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1828             C<failed> state (or in fact result in any state change of the unit), it affects
1829             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1830             requirements are not met, and when this is something the administrator or user should look
1831             into.",
1832             'type' => 'leaf',
1833             'value_type' => 'uniline'
1834             },
1835             'AssertPathIsDirectory',
1836             {
1837             'description' => "Similar to the C<ConditionArchitecture>,
1838             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1839             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1840             assertion setting that is not met results in failure of the start job (which means this is logged
1841             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1842             C<failed> state (or in fact result in any state change of the unit), it affects
1843             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1844             requirements are not met, and when this is something the administrator or user should look
1845             into.",
1846             'type' => 'leaf',
1847             'value_type' => 'uniline'
1848             },
1849             'AssertPathIsSymbolicLink',
1850             {
1851             'description' => "Similar to the C<ConditionArchitecture>,
1852             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1853             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1854             assertion setting that is not met results in failure of the start job (which means this is logged
1855             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1856             C<failed> state (or in fact result in any state change of the unit), it affects
1857             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1858             requirements are not met, and when this is something the administrator or user should look
1859             into.",
1860             'type' => 'leaf',
1861             'value_type' => 'uniline'
1862             },
1863             'AssertPathIsMountPoint',
1864             {
1865             'description' => "Similar to the C<ConditionArchitecture>,
1866             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1867             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1868             assertion setting that is not met results in failure of the start job (which means this is logged
1869             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1870             C<failed> state (or in fact result in any state change of the unit), it affects
1871             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1872             requirements are not met, and when this is something the administrator or user should look
1873             into.",
1874             'type' => 'leaf',
1875             'value_type' => 'uniline'
1876             },
1877             'AssertPathIsReadWrite',
1878             {
1879             'description' => "Similar to the C<ConditionArchitecture>,
1880             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1881             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1882             assertion setting that is not met results in failure of the start job (which means this is logged
1883             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1884             C<failed> state (or in fact result in any state change of the unit), it affects
1885             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1886             requirements are not met, and when this is something the administrator or user should look
1887             into.",
1888             'type' => 'leaf',
1889             'value_type' => 'uniline'
1890             },
1891             'AssertPathIsEncrypted',
1892             {
1893             'description' => "Similar to the C<ConditionArchitecture>,
1894             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1895             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1896             assertion setting that is not met results in failure of the start job (which means this is logged
1897             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1898             C<failed> state (or in fact result in any state change of the unit), it affects
1899             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1900             requirements are not met, and when this is something the administrator or user should look
1901             into.",
1902             'type' => 'leaf',
1903             'value_type' => 'uniline'
1904             },
1905             'AssertDirectoryNotEmpty',
1906             {
1907             'description' => "Similar to the C<ConditionArchitecture>,
1908             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1909             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1910             assertion setting that is not met results in failure of the start job (which means this is logged
1911             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1912             C<failed> state (or in fact result in any state change of the unit), it affects
1913             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1914             requirements are not met, and when this is something the administrator or user should look
1915             into.",
1916             'type' => 'leaf',
1917             'value_type' => 'uniline'
1918             },
1919             'AssertFileNotEmpty',
1920             {
1921             'description' => "Similar to the C<ConditionArchitecture>,
1922             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1923             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1924             assertion setting that is not met results in failure of the start job (which means this is logged
1925             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1926             C<failed> state (or in fact result in any state change of the unit), it affects
1927             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1928             requirements are not met, and when this is something the administrator or user should look
1929             into.",
1930             'type' => 'leaf',
1931             'value_type' => 'uniline'
1932             },
1933             'AssertFileIsExecutable',
1934             {
1935             'description' => "Similar to the C<ConditionArchitecture>,
1936             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1937             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1938             assertion setting that is not met results in failure of the start job (which means this is logged
1939             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1940             C<failed> state (or in fact result in any state change of the unit), it affects
1941             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1942             requirements are not met, and when this is something the administrator or user should look
1943             into.",
1944             'type' => 'leaf',
1945             'value_type' => 'uniline'
1946             },
1947             'AssertUser',
1948             {
1949             'description' => "Similar to the C<ConditionArchitecture>,
1950             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1951             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1952             assertion setting that is not met results in failure of the start job (which means this is logged
1953             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1954             C<failed> state (or in fact result in any state change of the unit), it affects
1955             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1956             requirements are not met, and when this is something the administrator or user should look
1957             into.",
1958             'type' => 'leaf',
1959             'value_type' => 'uniline'
1960             },
1961             'AssertGroup',
1962             {
1963             'description' => "Similar to the C<ConditionArchitecture>,
1964             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1965             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1966             assertion setting that is not met results in failure of the start job (which means this is logged
1967             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1968             C<failed> state (or in fact result in any state change of the unit), it affects
1969             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1970             requirements are not met, and when this is something the administrator or user should look
1971             into.",
1972             'type' => 'leaf',
1973             'value_type' => 'uniline'
1974             },
1975             'AssertControlGroupController',
1976             {
1977             'description' => "Similar to the C<ConditionArchitecture>,
1978             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1979             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1980             assertion setting that is not met results in failure of the start job (which means this is logged
1981             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1982             C<failed> state (or in fact result in any state change of the unit), it affects
1983             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1984             requirements are not met, and when this is something the administrator or user should look
1985             into.",
1986             'type' => 'leaf',
1987             'value_type' => 'uniline'
1988             },
1989             'AssertMemory',
1990             {
1991             'description' => "Similar to the C<ConditionArchitecture>,
1992             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
1993             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
1994             assertion setting that is not met results in failure of the start job (which means this is logged
1995             loudly). Note that hitting a configured assertion does not cause the unit to enter the
1996             C<failed> state (or in fact result in any state change of the unit), it affects
1997             only the job queued for it. Use assertion expressions for units that cannot operate when specific
1998             requirements are not met, and when this is something the administrator or user should look
1999             into.",
2000             'type' => 'leaf',
2001             'value_type' => 'uniline'
2002             },
2003             'AssertCPUs',
2004             {
2005             'description' => "Similar to the C<ConditionArchitecture>,
2006             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
2007             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
2008             assertion setting that is not met results in failure of the start job (which means this is logged
2009             loudly). Note that hitting a configured assertion does not cause the unit to enter the
2010             C<failed> state (or in fact result in any state change of the unit), it affects
2011             only the job queued for it. Use assertion expressions for units that cannot operate when specific
2012             requirements are not met, and when this is something the administrator or user should look
2013             into.",
2014             'type' => 'leaf',
2015             'value_type' => 'uniline'
2016             },
2017             'AssertCPUFeature',
2018             {
2019             'description' => "Similar to the C<ConditionArchitecture>,
2020             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
2021             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
2022             assertion setting that is not met results in failure of the start job (which means this is logged
2023             loudly). Note that hitting a configured assertion does not cause the unit to enter the
2024             C<failed> state (or in fact result in any state change of the unit), it affects
2025             only the job queued for it. Use assertion expressions for units that cannot operate when specific
2026             requirements are not met, and when this is something the administrator or user should look
2027             into.",
2028             'type' => 'leaf',
2029             'value_type' => 'uniline'
2030             },
2031             'AssertOSRelease',
2032             {
2033             'description' => "Similar to the C<ConditionArchitecture>,
2034             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
2035             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
2036             assertion setting that is not met results in failure of the start job (which means this is logged
2037             loudly). Note that hitting a configured assertion does not cause the unit to enter the
2038             C<failed> state (or in fact result in any state change of the unit), it affects
2039             only the job queued for it. Use assertion expressions for units that cannot operate when specific
2040             requirements are not met, and when this is something the administrator or user should look
2041             into.",
2042             'type' => 'leaf',
2043             'value_type' => 'uniline'
2044             },
2045             'AssertMemoryPressure',
2046             {
2047             'description' => "Similar to the C<ConditionArchitecture>,
2048             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
2049             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
2050             assertion setting that is not met results in failure of the start job (which means this is logged
2051             loudly). Note that hitting a configured assertion does not cause the unit to enter the
2052             C<failed> state (or in fact result in any state change of the unit), it affects
2053             only the job queued for it. Use assertion expressions for units that cannot operate when specific
2054             requirements are not met, and when this is something the administrator or user should look
2055             into.",
2056             'type' => 'leaf',
2057             'value_type' => 'uniline'
2058             },
2059             'AssertCPUPressure',
2060             {
2061             'description' => "Similar to the C<ConditionArchitecture>,
2062             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
2063             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
2064             assertion setting that is not met results in failure of the start job (which means this is logged
2065             loudly). Note that hitting a configured assertion does not cause the unit to enter the
2066             C<failed> state (or in fact result in any state change of the unit), it affects
2067             only the job queued for it. Use assertion expressions for units that cannot operate when specific
2068             requirements are not met, and when this is something the administrator or user should look
2069             into.",
2070             'type' => 'leaf',
2071             'value_type' => 'uniline'
2072             },
2073             'AssertIOPressure',
2074             {
2075             'description' => "Similar to the C<ConditionArchitecture>,
2076             C<ConditionVirtualization>, \x{2026}, condition settings described above, these settings
2077             add assertion checks to the start-up of the unit. However, unlike the conditions settings, any
2078             assertion setting that is not met results in failure of the start job (which means this is logged
2079             loudly). Note that hitting a configured assertion does not cause the unit to enter the
2080             C<failed> state (or in fact result in any state change of the unit), it affects
2081             only the job queued for it. Use assertion expressions for units that cannot operate when specific
2082             requirements are not met, and when this is something the administrator or user should look
2083             into.",
2084             'type' => 'leaf',
2085             'value_type' => 'uniline'
2086             },
2087             'StartLimitInterval',
2088             {
2089             'status' => 'deprecated',
2090             'type' => 'leaf',
2091             'value_type' => 'uniline',
2092             'warn' => 'StartLimitInterval is now StartLimitIntervalSec.'
2093             },
2094             'OnFailureIsolate',
2095             {
2096             'status' => 'deprecated',
2097             'type' => 'leaf',
2098             'value_type' => 'uniline',
2099             'warn' => 'OnFailureIsolate is now OnFailureJobMode.'
2100             }
2101             ],
2102             'generated_by' => 'parse-man.pl from systemd 252 doc',
2103             'license' => 'LGPLv2.1+',
2104             'name' => 'Systemd::Section::Unit'
2105             }
2106             ]
2107             ;
2108