Need help with systemd service files

Michal Schmidt mschmidt at redhat.com
Thu Feb 23 13:34:18 UTC 2012


Hello,

On 02/23/2012 01:34 PM, Juerg Haefliger wrote:
> Any of the services could fail but that shouldn't affect any of
> the other services.

 From this you can deduce the answer to one of your questions.
You don't want to use Requires then.

> 1) Service A after the local filesystem is mounted.
> 2) Service B after the network is up and service A terminated.
> 3) At this point I'd like to create a reference point for other services
> to hook into.
> 4) Service C after the reference point and after syslog is up.
> 5) Service D after rc-local and after service C terminated.
>
> What I have at the moment is the following:
>
> A.service:
> [unit]
> Description=A
> After=local-fs.target

You don't need to state this ordering dependency, because your service
will get the default dependency on basic.target which implies
local-fs.target indirectly.

> [Service]
> Type=oneshot
> ExecStart=/usr/bin/A
> RemainAfterExit=yes
>
> B.service:
> [unit]
> Description=B
> After=network.target A.service
> [Service]
> Type=oneshot
> ExecStart=/usr/bin/B
> RemainAfterExit=yes
>
> C.target:
> [unit]
> Description=C
> After=A.service B.service
>
> C.service:
> [unit]
> Description=C
> After=syslog.target C.target

syslog.target is always available these days, because the syslog socket 
gets activated early.

> [Service]
> Type=oneshot
> ExecStart=/usr/bin/C
> RemainAfterExit=yes
>
> D.service:
> [unit]
> Description=D
> After=rc-local.service C.service
> [Service]
> Type=oneshot
> ExecStart=/usr/bin/D
> RemainAfterExit=yes

I don't see any [Install] sections, so I assume you simply linked the 
services manually into multi-user.target.wants.
Apparently you forgot to pull in C.target as well, so you fail to get 
the ordering the target was supposed to ensure.

> Do I really need 'RemainAfterExit=y'?

It depends. Do you want the services to appear as "active(exited)" or 
"inactive(dead)" after they've run? Do you want "systemctl start 
A.service" to be a no-op after boot, or should it re-run the program again?

> Do I need any 'Wants' or 'Requires'?

You don't want Requires, as mentioned above.
Whether you want Wants... again, it depends. Does it make sense to start 
the services without trying to start the ones that you said should be 
ordered before? Do you want the admin to be able to enable/disable each 
service separately?

Michal


More information about the devel mailing list