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