docs: add a note about selectively overriding default dependencies

This documents that explicit `Before=`/`After=` dependencies can be
used to selectively override implicit ordering coming from default
dependencies. That allows for more granular control compared to the
already documented `DefaultDependencies=no` option.

The alternative approach came up in a discussion around the ordering
of `boot-complete.target`, so this also adds an explicit suggestion
in that direction to the "Automatic Boot Assessment" documentation.

Ref: https://lists.freedesktop.org/archives/systemd-devel/2022-September/048330.html
This commit is contained in:
Luca BRUNO 2022-09-19 10:09:17 +00:00 committed by Zbigniew Jędrzejewski-Szmek
parent 55b5daf9b2
commit 72ceee435d
2 changed files with 12 additions and 4 deletions

View file

@ -197,6 +197,14 @@ are a couple of recommendations.
wrap them in a unit and order them after `boot-complete.target`, pulling it
in.
Such unit would be typically wanted (or required) by one of the
[`bootup`](https://www.freedesktop.org/software/systemd/man/bootup.html) targets,
for example `multi-user.target`. To avoid potential loops due to conflicting
[default dependencies](https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Default%20Dependencies)
ordering, it is recommended to also add an explicit dependency (e.g.
`After=multi-user.target`) to the unit. This overrides the implicit ordering
and allows `boot-complete.target` to start after the given bootup target.
## FAQ
1. *I have a service which — when it fails — should immediately cause a

View file

@ -331,11 +331,11 @@
<para>For example, target units will complement all configured dependencies of type
<varname>Wants=</varname> or <varname>Requires=</varname> with dependencies of type
<varname>After=</varname> unless <varname>DefaultDependencies=no</varname> is set in the
specified units. See
<varname>After=</varname>. See
<citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details. Note that this behavior can be turned off by setting
<varname>DefaultDependencies=no</varname>.</para>
for details. Note that this behavior can be opted out by setting
<varname>DefaultDependencies=no</varname> in the specified units, or it can be selectively
overidden via an explicit <varname>Before=</varname> dependency.</para>
</refsect2>
</refsect1>