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