]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/systemd.path.xml
Merge pull request #14590 from poettering/doc-fixlets
[thirdparty/systemd.git] / man / systemd.path.xml
CommitLineData
b36b082c 1<?xml version='1.0'?> <!--*-nxml-*-->
3a54a157 2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
12b42c76 3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
0307f791 4<!-- SPDX-License-Identifier: LGPL-2.1+ -->
b36b082c
LP
5
6<refentry id="systemd.path">
798d3a52
ZJS
7 <refentryinfo>
8 <title>systemd.path</title>
9 <productname>systemd</productname>
798d3a52
ZJS
10 </refentryinfo>
11
12 <refmeta>
13 <refentrytitle>systemd.path</refentrytitle>
14 <manvolnum>5</manvolnum>
15 </refmeta>
16
17 <refnamediv>
18 <refname>systemd.path</refname>
19 <refpurpose>Path unit configuration</refpurpose>
20 </refnamediv>
21
22 <refsynopsisdiv>
23 <para><filename><replaceable>path</replaceable>.path</filename></para>
24 </refsynopsisdiv>
25
26 <refsect1>
27 <title>Description</title>
28
29 <para>A unit configuration file whose name ends in
30 <literal>.path</literal> encodes information about a path
31 monitored by systemd, for path-based activation.</para>
32
33 <para>This man page lists the configuration options specific to
34 this unit type. See
35 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
36 for the common options of all unit configuration files. The common
f6275730
PW
37 configuration items are configured in the generic <literal>[Unit]</literal> and
38 <literal>[Install]</literal> sections. The path specific configuration options are
39 configured in the <literal>[Path]</literal> section.</para>
798d3a52
ZJS
40
41 <para>For each path file, a matching unit file must exist,
42 describing the unit to activate when the path changes. By default,
43 a service by the same name as the path (except for the suffix) is
44 activated. Example: a path file <filename>foo.path</filename>
45 activates a matching service <filename>foo.service</filename>. The
46 unit to activate may be controlled by <varname>Unit=</varname>
47 (see below).</para>
48
49 <para>Internally, path units use the
3ba3a79d 50 <citerefentry project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry>
798d3a52
ZJS
51 API to monitor file systems. Due to that, it suffers by the same
52 limitations as inotify, and for example cannot be used to monitor
53 files or directories changed by other machines on remote NFS file
54 systems.</para>
1e8a7eff
LP
55
56 <para>When a service unit triggered by a path unit terminates (regardless whether it exited successfully
57 or failed), monitored paths are checked immediately again, and the service accordingly restarted
58 instantly. As protection against busy looping in this trigger/start cycle, a start rate limit is enforced
59 on the service unit, see <varname>StartLimitIntervalSec=</varname> and
60 <varname>StartLimitBurst=</varname> in
61 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Unlike
62 other service failures, the error condition that the start rate limit is hit is propagated from the
63 service unit to the path unit and causes the path unit to fail as well, thus ending the loop.</para>
c129bd5d 64 </refsect1>
798d3a52 65
c129bd5d 66 <refsect1>
aed5cb03 67 <title>Automatic Dependencies</title>
45f09f93 68
aed5cb03
ZJS
69 <refsect2>
70 <title>Implicit Dependencies</title>
45f09f93 71
aed5cb03 72 <para>The following dependencies are implicitly added:</para>
45f09f93 73
aed5cb03
ZJS
74 <itemizedlist>
75 <listitem><para>If a path unit is beneath another mount unit in the file
76 system hierarchy, both a requirement and an ordering dependency
77 between both units are created automatically.</para></listitem>
45f09f93 78
aed5cb03
ZJS
79 <listitem><para>An implicit <varname>Before=</varname> dependency is added
80 between a path unit and the unit it is supposed to activate.</para></listitem>
81 </itemizedlist>
82 </refsect2>
83
84 <refsect2>
85 <title>Default Dependencies</title>
45f09f93 86
aed5cb03 87 <para>The following dependencies are added unless <varname>DefaultDependencies=no</varname> is set:</para>
45f09f93 88
aed5cb03
ZJS
89 <itemizedlist>
90 <listitem><para>Path units will automatically have dependencies of type <varname>Before=</varname> on
91 <filename>paths.target</filename>,
92 dependencies of type <varname>After=</varname> and <varname>Requires=</varname> on
93 <filename>sysinit.target</filename>, and have dependencies of type <varname>Conflicts=</varname> and
94 <varname>Before=</varname> on <filename>shutdown.target</filename>. These ensure that path units are terminated
95 cleanly prior to system shutdown. Only path units involved with early boot or late system shutdown should
96 disable <varname>DefaultDependencies=</varname> option.</para></listitem>
97 </itemizedlist>
45f09f93 98
aed5cb03
ZJS
99 <para></para>
100 </refsect2>
798d3a52
ZJS
101 </refsect1>
102
103 <refsect1>
104 <title>Options</title>
105
106 <para>Path files must include a [Path] section, which carries
107 information about the path(s) it monitors. The options specific to
108 the [Path] section of path units are the following:</para>
109
110 <variablelist class='unit-directives'>
111 <varlistentry>
112 <term><varname>PathExists=</varname></term>
113 <term><varname>PathExistsGlob=</varname></term>
114 <term><varname>PathChanged=</varname></term>
115 <term><varname>PathModified=</varname></term>
116 <term><varname>DirectoryNotEmpty=</varname></term>
117
118 <listitem><para>Defines paths to monitor for certain changes:
119 <varname>PathExists=</varname> may be used to watch the mere
120 existence of a file or directory. If the file specified
121 exists, the configured unit is activated.
122 <varname>PathExistsGlob=</varname> works similar, but checks
123 for the existence of at least one file matching the globbing
124 pattern specified. <varname>PathChanged=</varname> may be used
125 to watch a file or directory and activate the configured unit
126 whenever it changes. It is not activated on every write to the
127 watched file but it is activated if the file which was open
128 for writing gets closed. <varname>PathModified=</varname> is
129 similar, but additionally it is activated also on simple
130 writes to the watched file.
131 <varname>DirectoryNotEmpty=</varname> may be used to watch a
132 directory and activate the configured unit whenever it
133 contains at least one file.</para>
134
135 <para>The arguments of these directives must be absolute file
136 system paths.</para>
137
138 <para>Multiple directives may be combined, of the same and of
139 different types, to watch multiple paths. If the empty string
140 is assigned to any of these options, the list of paths to
141 watch is reset, and any prior assignments of these options
142 will not have any effect.</para>
143
144 <para>If a path already exists (in case of
145 <varname>PathExists=</varname> and
146 <varname>PathExistsGlob=</varname>) or a directory already is
147 not empty (in case of <varname>DirectoryNotEmpty=</varname>)
148 at the time the path unit is activated, then the configured
149 unit is immediately activated as well. Something similar does
150 not apply to <varname>PathChanged=</varname> and
151 <varname>PathModified=</varname>.</para>
152
153 <para>If the path itself or any of the containing directories
154 are not accessible, <command>systemd</command> will watch for
155 permission changes and notice that conditions are satisfied
156 when permissions allow that. </para></listitem>
157 </varlistentry>
158 <varlistentry>
159 <term><varname>Unit=</varname></term>
160
161 <listitem><para>The unit to activate when any of the
162 configured paths changes. The argument is a unit name, whose
163 suffix is not <literal>.path</literal>. If not specified, this
164 value defaults to a service that has the same name as the path
165 unit, except for the suffix. (See above.) It is recommended
166 that the unit name that is activated and the unit name of the
167 path unit are named identical, except for the
168 suffix.</para></listitem>
169 </varlistentry>
170 <varlistentry>
171 <term><varname>MakeDirectory=</varname></term>
172
173 <listitem><para>Takes a boolean argument. If true, the
174 directories to watch are created before watching. This option
175 is ignored for <varname>PathExists=</varname> settings.
176 Defaults to <option>false</option>.</para></listitem>
177 </varlistentry>
178 <varlistentry>
179 <term><varname>DirectoryMode=</varname></term>
180
181 <listitem><para>If <varname>MakeDirectory=</varname> is
182 enabled, use the mode specified here to create the directories
183 in question. Takes an access mode in octal notation. Defaults
184 to <option>0755</option>.</para></listitem>
185 </varlistentry>
186 </variablelist>
187 </refsect1>
188
189 <refsect1>
190 <title>See Also</title>
191 <para>
192 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
193 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
194 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
195 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
3ba3a79d 196 <citerefentry project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
798d3a52
ZJS
197 <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>
198 </para>
199 </refsect1>
b36b082c
LP
200
201</refentry>