along with systemd; If not, see <http://www.gnu.org/licenses/>.
-->
-<refentry id="systemd-analyze">
+<refentry id="systemd-analyze"
+ xmlns:xi="http://www.w3.org/2001/XInclude">
<refentryinfo>
<title>systemd-analyze</title>
<arg choice="plain">set-log-level</arg>
<arg choice="opt"><replaceable>LEVEL</replaceable></arg>
</cmdsynopsis>
+ <cmdsynopsis>
+ <command>systemd-analyze</command>
+ <arg choice="opt" rep="repeat">OPTIONS</arg>
+ <arg choice="plain">verify</arg>
+ <arg choice="opt" rep="repeat"><replaceable>FILES</replaceable></arg>
+ </cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<para><command>systemd-analyze</command> may be used
to determine system boot-up performance statistics and
retrieve other state and tracing information from the
- system and service manager.</para>
+ system and service manager, and to verify the
+ correctness of unit files.</para>
<para><command>systemd-analyze time</command>
prints the time spent in the kernel before
described in
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>).</para>
+ <para><command>systemd-analyze verify</command> will
+ load unit files and print warnings if any errors are
+ detected. Files specified on the command line will be
+ loaded, but also any other units referenced by
+ them. This command works by prepending the directories
+ for all command line arguments at the beginning of the
+ unit load path, which means that all units files found
+ in those directories will be used in preference to the
+ unit files found in the standard locations, even if
+ not listed explicitly.</para>
+
<para>If no command is passed, <command>systemd-analyze
time</command> is implied.</para>
<variablelist>
<varlistentry>
- <term><option>-h</option></term>
- <term><option>--help</option></term>
+ <term><option>--user</option></term>
- <listitem><para>Prints a short help
- text and exits.</para></listitem>
+ <listitem><para>Operates on the user
+ systemd instance.</para></listitem>
</varlistentry>
<varlistentry>
- <term><option>--user</option></term>
+ <term><option>--system</option></term>
- <listitem><para>Shows performance data
- of user sessions instead of the system
- manager.</para></listitem>
+ <listitem><para>Operates on the system
+ systemd instance. This is the implied
+ default.</para></listitem>
</varlistentry>
<varlistentry>
<command>dot</command> command (see
above), selects which dependencies are
shown in the dependency graph. If
- <option>--order</option> is passed
+ <option>--order</option> is passed,
only dependencies of type
<varname>After=</varname> or
<varname>Before=</varname> are
shown. If <option>--require</option>
- is passed only dependencies of type
+ is passed, only dependencies of type
<varname>Requires=</varname>,
<varname>RequiresOverridable=</varname>,
<varname>Requisite=</varname>,
</varlistentry>
<varlistentry>
- <term><option>--no-pager</option></term>
+ <term><option>--no-man</option></term>
- <listitem>
- <para>Do not pipe output into a pager.</para>
- </listitem>
+ <listitem><para>Do not invoke man to verify the existence
+ of man pages listen in <varname>Documentation=</varname>.
+ </para></listitem>
</varlistentry>
+
+ <xi:include href="user-system-options.xml" xpointer="host" />
+ <xi:include href="user-system-options.xml" xpointer="machine" />
+
+ <xi:include href="standard-options.xml" xpointer="help" />
+ <xi:include href="standard-options.xml" xpointer="version" />
+ <xi:include href="standard-options.xml" xpointer="no-pager" />
</variablelist>
</refsect1>
<refsect1>
<title>Exit status</title>
- <para>On success 0 is returned, a non-zero failure
+ <para>On success, 0 is returned, a non-zero failure
code otherwise.</para>
</refsect1>
<refsect1>
- <title>Examples</title>
+ <title>Examples for <command>dot</command></title>
- <para>This plots all dependencies of any unit whose
- name starts with <literal>avahi-daemon.</literal>:</para>
+ <example>
+ <title>Plots all dependencies of any unit whose
+ name starts with <literal>avahi-daemon</literal></title>
- <programlisting>$ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg
-$ eog avahi.svg</programlisting>
+ <programlisting>$ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg
+ $ eog avahi.svg</programlisting>
+ </example>
- <para>This plots the dependencies between all known target units:</para>
+ <example>
+ <title>Plots the dependencies between all known target units</title>
- <programlisting>systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg
+ <programlisting>systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg
$ eog targets.svg</programlisting>
-
-
+ </example>
</refsect1>
<refsect1>
- <title>Environment</title>
-
- <variablelist class='environment-variables'>
- <varlistentry>
- <term><varname>$SYSTEMD_PAGER</varname></term>
-
- <listitem>
- <para>Pager to use when <option>--no-pager</option> is not
- given; overrides <varname>$PAGER</varname>. Setting this to
- an empty string or the value <literal>cat</literal> is
- equivalent to passing
- <option>--no-pager</option>.</para>
- </listitem>
- </varlistentry>
- </variablelist>
+ <title>Examples for <command>verify</command></title>
+
+ <para>The following errors are currently detected:</para>
+ <itemizedlist>
+ <listitem><para>unknown sections and
+ directives, </para></listitem>
+
+ <listitem><para>missing dependencies which are
+ required to start the given unit,
+ </para></listitem>
+
+ <listitem><para>man pages listed in
+ <varname>Documentation=</varname> which are
+ not found in the system,</para></listitem>
+
+ <listitem><para>commands listed in
+ <varname>ExecStart=</varname> and similar
+ which are not found in the system or not
+ executable.</para></listitem>
+ </itemizedlist>
+
+ <example>
+ <title>Misspelt directives</title>
+
+ <programlisting>$ cat ./user.slice
+[Unit]
+WhatIsThis=11
+Documentation=man:nosuchfile(1)
+Requires=different.service
+
+[Service]
+Desription=x
+
+$ systemd-analyze verify ./user.slice
+[./user.slice:9] Unknown lvalue 'WhatIsThis' in section 'Unit'
+[./user.slice:13] Unknown section 'Service'. Ignoring.
+Error: org.freedesktop.systemd1.LoadFailed:
+ Unit different.service failed to load:
+ No such file or directory.
+Failed to create user.slice/start: Invalid argument
+user.slice: man nosuchfile(1) command failed with code 16
+ </programlisting>
+ </example>
+
+ <example>
+ <title>Missing service units</title>
+
+ <programlisting>$ tail ./a.socket ./b.socket
+==> ./a.socket <==
+[Socket]
+ListenStream=100
+
+==> ./b.socket <==
+[Socket]
+ListenStream=100
+Accept=yes
+
+$ systemd-analyze verify ./a.socket ./b.socket
+Service a.service not loaded, a.socket cannot be started.
+Service b@0.service not loaded, b.socket cannot be started.
+ </programlisting>
+ </example>
</refsect1>
+ <xi:include href="less-variables.xml" />
+
<refsect1>
<title>See Also</title>
<para>