[systemd-devel] multi-user.target only wants network.service if I'm doing 'systemct show runlevel3.target'

Ivan Shapovalov intelfx100 at gmail.com
Tue Dec 9 22:23:16 PST 2014


On Tuesday 09 December 2014 at 17:25:48, Francis Moreau wrote:	
> Hello Lennart,
> 
> Thanks for answering !
> 
> On 12/09/2014 02:10 PM, Lennart Poettering wrote:
> > On Tue, 09.12.14 11:19, Francis Moreau (francis.moro at gmail.com) wrote:
> > 
> >> Hello,
> >>
> >> I've a very weird behaviour with systemd 217:
> >>
> >> # systemctl show -p Wants multi-user.target | grep network.service
> >> # systemctl show -p Wants runlevel3.target | grep network.service
> >> Wants= ... network.service ...
> >> # systemctl show -p Wants multi-user.target | grep network.service
> >> Wants=... network.service ...
> >>
> >> So basically the network.service is not part of the multi-user target
> >> dependencies. But if I'm showing the state of the runlevel3 target, the
> >> network service magically becomes a dep of multi-user.target.
> >>
> >> The network.service is an sysv service which is started by rc[345].d and
> >> has in its LSB:
> >>
> >> Provide: $network
> >>
> >> Could anybody clarify what I'm facing ?
> > 
> > systemd lazy loads services from the file system as they are
> > referenced. This includes symlinked aliases, which are only loaded when
> > a unit is referenced by that specific name.
> > 
> 
> Sorry but I don't really understand.
> 
> Do you mean that the network.service wasn't loaded although the
> runlevel3.target, which is an alias for multi-user target (default
> target) wants it ?
> 
> I would be glad if you could enlight me because I'm confused.

Apparently, network.service gets pulled in only via runlevel3.target, i. e.
there is a symlink of kind

/{etc,usr/lib,run}/systemd/system/runlevel3.target.wants/network.service -> network.service

That is, the Wants= dependency is generated for runlevel3.target only, not for
multi-user.target.

And, because systemd loads units lazily, systemd does not know about runlevel3.target
(and its dependencies) before anything forces systemd to load that unit.

After you issue `systemctl show runlevel3.target`, systemd loads that unit,
loads its dependencies and merges them to multi-user.target (because runlevel3.target
is an alias for multi-user.target).

HTHs,
-- 
Ivan Shapovalov / intelfx /

> 
> >> Also it appears that runlevel3 target is an alias for multi-user one.
> >> Could anybody where this alias is done ? If that's in the source code of
> >> systemd I would be curious to see where exactly.
> > 
> > The /usr/lib/systemd/system/runlevel[0-5].target symlinks create these
> > alias names.
> > 
> 
> I see now.
> 
> Thanks.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20141210/d729d5a2/attachment.sig>


More information about the systemd-devel mailing list