[systemd-devel] "bad" status for genersated target; why?

Andrei Borzenkov arvidjaar at gmail.com
Wed May 15 07:21:05 UTC 2019


On Wed, May 15, 2019 at 9:01 AM Ulrich Windl
<Ulrich.Windl at rz.uni-regensburg.de> wrote:
>
> >>> Andrei Borzenkov <arvidjaar at gmail.com> schrieb am 14.05.2019 um 20:21 in
> Nachricht <c39c1270-41bf-dd7a-ed39-11c148f336a9 at gmail.com>:
> > 14.05.2019 16:39, Ulrich Windl пишет:
> >> Hi!
> >>
> >> Developing my first systemd service I have some problems I don't
> understand:
> >> After installation, I get this status:
> >> # systemctl status iotwatch.target          ● iotwatch.target - iotwatch
> I/O
> >> performance monitor
> >>    Loaded: loaded (/run/systemd/generator.late/iotwatch.target; bad;
> vendor
> >> preset: disabled)
> >>    Active: inactive (dead)
> >>      Docs: man:iotwatch at .service(8)
> >>            man:iotwatch-generator(8)
> >>
> >> Why "bad"?
> >
> > Again - this has improved in current version which now tells you that
> > unit is generated.
>
> So there's nothing wrong with the unit?
>
> >
> >> # ll /run/systemd/generator.late/iotwatch.target
> >> -rw-r--r-- 1 root root 281 May 14 15:24
> >> /run/systemd/generator.late/iotwatch.target
> >> # systemctl is-enabled iotwatch.target
> >> Failed to get unit file state for iotwatch.target: No such file or
> directory
> >>
> >> Here we are again: Where should the file be?
> >> Aren't targets allowed to be generated?
> >>
> >
> > Targets are allowed to be generated but generated units cannot be
> > enabled/disabled. The rationale probably is that if you create unit file
> > you can just as well create symlink to this unit file. Also "systemctl
>
> I think "Generated iotwatch.target cannot have a state" would be a much
> improved error message then.

Define "state".

> So again there's nothing wrong with the unit
> file?
>
> > dameon-reload" removes and re-creates all generated units, so any
> > symlink to such unit outside of generated subdirectories potentially
> > becomes invalid.
>
> I think all the symlink stuff should be an implementation detail that
> shouldn't be part of the user interface; instead there should be some
> higher-level commands to maipulate these.
>

It is exactly the opposite - symlinks are *the* official documented
method to configure unit dependencies; "systemctl enable" is just
convenience layer on top of it.

> >
> > Documentation could be better indeed.
>
> Finally: If a generated unit cannot be enabled or disabled, isn't the
> "vendor-preset: disabled" the wrong choice:

Neither is it printed in current systemd version.

> I specified nothing, and the logic
> should be: If a generator created a unit it should be enabled; otherwise sich a
> unit shouldn't be enabled.
>

You misinterpret "enabled" and "disabled" basing on their English
meaning. Unit is "enabled" if links specified in [Install] sections
are present. Nothing more nothing less. You apparently assume
"enabled" means something different.

Generators run immediately before systemd computes initial
transaction; there is no point in time when user could perform
"systemctl enable" on them - it is already too late, system is already
booted using whatever configuration (including generated units) was
present. So any required links really have to be created together with
generated unit itself.

> I couldn't find the relevant manual page that discusses this topic...
>

Yes, the fact that generated units apparently cannot be
enabled/disabled using systemctl is not documented anywhere. Still
current systemd gives quite precise error message when you are trying
to do it. But documentation could certainly be improved.


More information about the systemd-devel mailing list