[systemd-devel] starting a service before anything else....

Mantas Mikulėnas grawity at gmail.com
Thu Jun 28 15:55:41 UTC 2018


On Thu, Jun 28, 2018, 18:37 MALET Jean-Luc <jeanluc.malet.snowsat at gmail.com>
wrote:

> Hi!
>
> I'm in charge of setting up an embedded solution based on debian, so on
> systemd, I'm more used to old init process, that was easy to tweak
> because based on script... but well... times seems now on systemd.
>
> I'm really puzzled because since the documentation seems to lack
> information, I have to find information on tutorials that focus only on
> late services..
>
> I found on one how to find the targets using "systemctl list-units
> --type=target" and some diagram explaining what target are suposed to be
> run in what order.... but well...
>
> my issue is that I've to run a script as early as possible, before
> mounts are done because lot of service will fail without , so I created
> a service
>

Mainly I guess it's because systemd wants to *avoid* things like "before
everything else" or "after everything else". (What if two units want to be
first?) The idea is that dependencies should be a little more explicit if
possible. For example, some of your services require /var/foo to be
mounted? They can depend on "var-foo.mount" or at least "local-fs.target".
And so on.

(Well, not to the extreme of course: even systemd has synchronization
points like basic.target, local-fs.target, ...)


>
> [Unit]
> Description=mount some file systems before anything and prepare the system
> Before=systemd-remount-fs.service
>
> [Service]
> Type=oneshot
> ExecStart=/etc/init.d/setup.sh start
>
> [Install]
> WantedBy=swap.target
>
>
> using journalctl I found that the first Reached point was the
> swap.target so it looked like a good WantedBy, but looking at the
> journalctl showed that the service was still not run in early systemd
> steps... so I added a Before rule using the "systemctl list-units
> --type=service" to guess what service where run on the system... and
> well... it's not working as expected... I still see my service run after
> some other services...
>

basic.target or sysinit.target would be a better place, depending on what
you do.

It might be a good idea to split the mega-script up if it tries to perform
several distinct tasks, too.

In either case, add "DefaultDependencies=no" to your services, to opt out
of all the hidden dependencies (which if I remember correctly are static,
essentially After=basic.target).
-- 

Mantas Mikulėnas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20180628/7c34053c/attachment.html>


More information about the systemd-devel mailing list