systemd (Was Re: tmpfs for strategic directories)

Lennart Poettering mzerqung at 0pointer.de
Tue Jun 1 20:13:40 UTC 2010


On Tue, 01.06.10 15:25, Bill Nottingham (notting at redhat.com) wrote:

> Lennart Poettering (mzerqung at 0pointer.de) said: 
> > > > Requires=basic.target sockets.target dbus.socket
> > > > After=basic.target sockets.target dbus.socket
> > > 
> > > What does this goop mean and why is it necessary?
> > 
> > basic.target encapsulates the early boot process (kinda the same stuff
> > rc.sysinit currently does). The Requires= make sure that this is pulled
> > in by dbus.service. The After= makes sure that it has finished before we
> > fork dbus.
> 
> How are these evaluated differently that you'd need to list both 'Requires'
> and 'After', as opposed to just one? (I would think Requires would imply
> After.)

Well, in systemd ordering dependencies are independent of requirement
independencies.

Explanation:

A requires B means that when A is started B is started too, at the same
time.

A after B means that when A is started and B is started as well, then B
is started first and only when that finished A is started too.

Now, if you combine both, then you get A requires B + A after B, which
means that when A is started we first start B and when that is finished
wwe load A too.

There are use-cases for all three cases listed above, so we thought we
cover this in just two dependency types, instead of three. (And in fact
actually, since we have "requires" and "requisite" too, this saves us
quite a few additional types)

Now, since base.target is pulled in by the default boot target anyway,
one could argue that in this case an After= would suffice, and the
requires= is redundant. But uh, on a logical level base.target is
actually required, so we should list both elements I think.

Lennart

-- 
Lennart Poettering                        Red Hat, Inc.
lennart [at] poettering [dot] net
http://0pointer.net/lennart/           GnuPG 0x1A015CC4


More information about the devel mailing list