systemd: Is it wrong?
Michal Schmidt
mschmidt at redhat.com
Mon Jul 11 09:10:45 UTC 2011
On Mon, 11 Jul 2011 08:44:16 +0000 (UTC) JB wrote:
> Let me take a shot at 2 examples of service files below.
> Are they correct setup-wise ?
> Will both examples be executed sequentially only ?
>
> 1.
>
> main-service-1.service:
> [Unit]
> Description=Main service 1
> Requires= ... sub-service-1.service sub-service-2.service
> After= ... sub-service-1.service sub-service-2.service
> ...
> [Service]
> Type=forking <---------------------- any other type too ?
> ExecStartPre=
> ExecStartPre=
> ExecStart=
> ExecStart= /usr/sbin/some-service
Nitpick: You can have only one ExecStart= in a forking unit. Only
oneshot units can have more.
> ExecStartPost=
> ExecStartPost=
> ...
>
> sub-service-1.service:
> [Unit]
> Description=Sub service 1
> ...
> [Service]
> ...
>
> sub-service-2.service:
> [Unit]
> Description=Sub service 2
> ...
> [Service]
> ...
First, sub-service-1.service and sub-service-2.service will be started
in parallel. When they're running, main-service-1.service will be
started by processing its ExecStart* commands sequentially.
> 2.
>
> main-service-2.service:
> [Unit]
> Description=Main service 2
> After= ...
> ...
> [Service]
> Type=forking <---------------------- any other type too ?
> ExecStartPre= sub-service-1.service
> ExecStartPre= sub-service-2.service
This is incorrect. ExecStartPre= expects a command to run, not a unit
name.
> What if sysadmin wants to execute them in parallel because she knows
> they can be executed this way (no conflict and no races) ?
> How, if by definition, systemd executes them sequentially only ?
> Can they be grouped and execution-parallelized in the whole service
> file, or at least in subgroups Pre-, regular, and Post- ?
Parallelism in systemd happens between multiple units, but never between
ExecStart* commands of one unit.
Requesting parallelism within one unit seems like over-engineering to
me. You can always split your unit to smaller ones if you want
parallelism.
> Can you give us a working example of a services setup (or something
> else) in systemd where execution-parallelism would be present or at
> least theoretically exploitable ?
Take a look at 'systemd-analyze plot' where you can clearly see
services starting in parallel. This Lennart's blog post has an example:
http://0pointer.de/blog/projects/blame-game.html
Michal
More information about the devel
mailing list