[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