Need help with systemd service files

Juerg Haefliger juergh at gmail.com
Thu Feb 23 14:35:24 UTC 2012


Hi Michal,

>
> 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.

Ok.


>> 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.

Ok.


>> [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.

Ok.


>> [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.

All services have an [install] section, I just dropped them for this
email. Forgot to pull in C.target where? Should D.service contain
"After=rc-local.service C.target" then?


>> 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?

Rerun using 'systemctl restart' would be nice. So 'RemainAfterExit=y'
needs to stay, right?


>> 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?

Not sure I understand. The sequence needs to be as described above
#1-#5, e.g. D should not start until A-C are done.


> Do you want the admin to be able to enable/disable each service separately?

The A-D services don't need to be managed separately, it's either all
of them or none.


Thanks for your help
...Juerg



>
> Michal


More information about the devel mailing list