Re: [systemd-devel] simple type service failed to be started won't effect the service requires it?

2016-06-21 Thread Han Pingtian
On Tue, Jun 21, 2016 at 05:01:55PM +0200, Lennart Poettering wrote:
> On Tue, 21.06.16 22:22, Han Pingtian (ha...@linux.vnet.ibm.com) wrote:
> 
> > Hi,
> > 
> > I have a service thinkfan.service:
> > 
> > [Unit]
> > Description=simple and lightweight fan control program
> > After=syslog.target lm_sensors.service
> > 
> > [Service]
> > ExecStart=/usr/sbin/thinkfan -n ${OPTIONS}
> > Type=simple
> > PIDFile=/var/run/thinkfan.pid
> > ExecReload=/bin/kill -HUP $MAINPID
> > EnvironmentFile=/etc/sysconfig/thinkfan
> > 
> > [Install]
> > WantedBy=multi-user.target
> > 
> > And I have added "Requires=thinkfan.service" in another service
> > foo.service. Now there are some problems in thinkfan.service, it cannot
> > be started. But foo.service can be started by "systemctl start
> > foo.service" though I hope it would fail due to thinkfan.service's
> > failure. 
> > 
> > Now if I changed the "Type=simple" to "Type=forking" in thinkfan.service, 
> > and remove "-n" to make thinkfan running as a daemon, then foo.service 
> > will fail to be started.
> > 
> > Is this a problem? Thanks in advance!
> 
> This is by design. By using Type=forking you basically say: "fork this
> off, wait until it double forks and exits in the parent". By using
> Type=simple you basically say: "fork this off, don't wait for
> anything". Now in the former case the initialization phase of the
> daemon is waited for and can return an exit code. In the latter case
> that's not possible: nothing is waited for, and nothing can return an
> initialization exit code.
> 
> Hence, if you want that an error condition from the initialisation
> phase of a daemon shall have an effect on Requires= then you cannot
> use Type=simple on that service. use Type=forking then, or Type=notify
> or another type.

Thanks a lot, Lennart!

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] simple type service failed to be started won't effect the service requires it?

2016-06-21 Thread Lennart Poettering
On Tue, 21.06.16 22:22, Han Pingtian (ha...@linux.vnet.ibm.com) wrote:

> Hi,
> 
> I have a service thinkfan.service:
> 
> [Unit]
> Description=simple and lightweight fan control program
> After=syslog.target lm_sensors.service
> 
> [Service]
> ExecStart=/usr/sbin/thinkfan -n ${OPTIONS}
> Type=simple
> PIDFile=/var/run/thinkfan.pid
> ExecReload=/bin/kill -HUP $MAINPID
> EnvironmentFile=/etc/sysconfig/thinkfan
> 
> [Install]
> WantedBy=multi-user.target
> 
> And I have added "Requires=thinkfan.service" in another service
> foo.service. Now there are some problems in thinkfan.service, it cannot
> be started. But foo.service can be started by "systemctl start
> foo.service" though I hope it would fail due to thinkfan.service's
> failure. 
> 
> Now if I changed the "Type=simple" to "Type=forking" in thinkfan.service, 
> and remove "-n" to make thinkfan running as a daemon, then foo.service 
> will fail to be started.
> 
> Is this a problem? Thanks in advance!

This is by design. By using Type=forking you basically say: "fork this
off, wait until it double forks and exits in the parent". By using
Type=simple you basically say: "fork this off, don't wait for
anything". Now in the former case the initialization phase of the
daemon is waited for and can return an exit code. In the latter case
that's not possible: nothing is waited for, and nothing can return an
initialization exit code.

Hence, if you want that an error condition from the initialisation
phase of a daemon shall have an effect on Requires= then you cannot
use Type=simple on that service. use Type=forking then, or Type=notify
or another type.

Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel