[systemd-devel] Requires and After
James Feeney
james at nurealm.net
Wed Jan 2 03:13:57 UTC 2019
> It's about Requires and After. I think a unit in Requires should imply
> that unit in After too, otherwise the requirement isn't really met.
> Is there a use case for Requires but not After?
Olaf, previously, on GitHub, you had said:
>> I think I understand Requires and After ...
and, I would suggest that, no - or you would not be asking this question.
systemd has two different classes of "dependencies": 1) "activation" dependencies, and 2) "ordering" dependencies.
An activation dependency does not, a priori, have to obey any rules about ordering. There are not, automatically, any promises or guarantees about in what order service units, for instance, might be queued for execution, based upon a Requires= dependency.
"Ordering" is an independent characteristic from "Activation". "Activation" only promises to enqueue a unit, and then, only if the unit is some kind of unit that can be "executed", such as a timer or service unit. In contrast, for instance, systemd is only a "passive observer" of a device unit. "enqueuing" a device unit for "activation" would make no sense in this context. A *service* unit that *creates* a device unit could be enqueued for activation, but not the device unit itself.
If "A Requires B", and you don't like that "A" *might* get enqueued, or get executed, before "B", then add an "ordering" dependency. "Ordering dependencies", then, create guarantees about unit activation *ordering*.
Are you sure that you were not wondering about "Requisite=", instead of "Requires="? Because, as far as I know, "Requisite=" is completely broken in systemd.
More information about the systemd-devel
mailing list