[systemd-devel] `Found ordering cycle on _SERVICE_` loops due to `local-fs.target` with `Requires` instead of `Wants` for mounts generated from `/etc/fstab`
Andrei Borzenkov
arvidjaar at gmail.com
Fri Apr 27 04:01:25 UTC 2018
26.04.2018 23:20, John Florian пишет:
> On 2018-04-26 16:04, John Florian wrote:
>> On 2018-04-25 04:53, Lennart Poettering wrote:
>>> There have been requests in improving the cycle breaking algorithm,
>>> but not much has been done in this area, since it's not clear what can
>>> be done. Ultimately it's just polishing a broken situation, and
>>> the better way out is to fix things properly, i.e. just correct the
>>> cycle in the dependencies in the first place.
>>
>> Having been the author of numerous custom services that are intended
>> to wedge into those provided by systemd/Fedora I've faced resolving
>> these several times and I've never felt all that competent at the
>> task. Lennart, you were immensely helpful on one occasion by pointing
>> me to `systemctl show FOO` but even then hunting the problem down was
>> far from simple (for me). I've done the dot/graphviz thing and found
>> it just as useless to me as when I've tried applying it to Puppet's
>> ordering/dependency looping. I'm not blaming those tools (or systemd)
>> because I'm well aware much of the problem is my inability to use them
>> effectively. The graphs always seem to be overly simple and revealing
>> no problem or overly detailed and obscuring the problem. Compound
>> that with "an arrow pointing this way means what exactly?"
>>
>> Is there anything else that could be done to make hunting these loops
>> down easier? Is there an example of any product that has a similar
>> situation where they excel at helping the developer? Or are we
>> already there and I just need more practice? I'm sure part of my
>> struggle is just not encountering these very regularly and integrating
>> into much that I'm only partly familiar with, but the result is the
>> same, trepidation and loathing.
>
> Since I hate to grumble w/o so much as offering any possible
> suggestions... It seems like it might be helpful to have something like
> `systemctl show` but only dumping the properties used for ordering and
> dependencies. Ideally, only ordering OR dependencies as the case
> warrants and for all units involved, but only those units.
Well, you could use "systemctl show -p Id -p After -p Before" but the
problem is to find the correct unit set. You really need something that
simulates transaction and evaluates dependencies like systemd does it.
Note that systemd should print offending cycle when it hits it:
апр 27 06:54:14 bor-Latitude-E5450 systemd[1582]: foo.service: Found
ordering cycle on foo.service/start
апр 27 06:54:14 bor-Latitude-E5450 systemd[1582]: foo.service: Found
dependency on bar.service/start
апр 27 06:54:14 bor-Latitude-E5450 systemd[1582]: foo.service: Found
dependency on baz.service/start
апр 27 06:54:14 bor-Latitude-E5450 systemd[1582]: foo.service: Found
dependency on foo.service/start
апр 27 06:54:14 bor-Latitude-E5450 systemd[1582]: foo.service: Breaking
ordering cycle by deleting job baz.service/start
It would be helpful it if additionally printed kind of dependency (like
foo.service is After bar.service) because this is by far not obvious for
average user.
More information about the systemd-devel
mailing list