[systemd-devel] Target updating status for dependencies
Martin Pitt
martin.pitt at ubuntu.com
Wed Jan 14 00:47:20 PST 2015
Hello all,
I have some trouble to understand how unit dependencies work when
they change status. Suppose I have an ifup-all-auto.target (which will
of course be created by a generator, but for experimentation I tried
with a plain unit):
| [Unit]
| Description=Wait until all "auto" ifupdown interfaces are up
| Before=network-online.target
| Requires=ifup at eth0.service
| After=ifup at eth0.service
| Requires=ifup at eth42.service
| After=ifup at eth42.service
|
| [Install]
| RequiredBy=network-online.target
After booting, ifup at eth0.service succeeds (active (exited)) as eth0
actually exists and works etc. But eth42 does not exist, thus it's in
state "failed (Result: exit-code)". Consequently,
| $ sudo systemctl status ifup-all-auto.target -l
| ● ifup-all-auto.target - Wait until all "auto" ifupdown interfaces are up
| Loaded: loaded (/etc/systemd/system/ifup-all-auto.target; enabled; vendor preset: enabled)
| Active: inactive (dead)
|
| Jan 14 09:34:58 autopkgtest systemd[1]: Dependency failed for Wait until all "auto" ifupdown interfaces are up.
| Jan 14 09:34:58 autopkgtest systemd[1]: Job ifup-all-auto.target/start failed with result 'dependency'.
(and obviously network-online.target is also in "dependency failed"
state). So we have
ifup at eth0 (SUCCESS) ifup at eth42 (FAIL)
| |
v v
ifup-all-auto.target (DEP FAIL)
|
v
network-online.target (DEP FAIL)
So far so good. But now I make eth42 appear (simulating server
situations where network interfaces just take a while to init) [1].
This causes ifup at eth42.service to get re-triggered via systemd's udev
rules, thus the status changes to "active (exited)", i. e. "success".
However, this doesn't seem to cause re-evaluation of the depending
units: After that, ifup-all-auto.target (and network-online.target)
are still in the same "dependency failed" state.
Calling "systemctl start ifup-all-auto.target" manually updates the
status, but at least in this case this should obviously happen
automatically.
Is this not how dependencies are supposed to work? If not, I suppose I
rather need some active program in ifup-all-auto.target which waits
for all expected interfaces to appear by itself? Or can I somehow
cause the reverse dependencies of ifup at .service to re-trigger? I
didn't see anything obvious in the manpages.
Thanks in advance for any insights!
Martin
[1] ip link add name eth42 type veth peer name veth42
--
Martin Pitt | http://www.piware.de
Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20150114/c2265516/attachment.sig>
More information about the systemd-devel
mailing list