On Mon, Nov 5, 2012 at 5:01 PM, Leonid Isaev <lisaev@umail.iu.edu> wrote:
I was wondering whether there is a guideline regarding using Type=forking daemons in systemd units. For instance, if a daemon supports a cmdline switch to run in foreground isn't it better to use this argument in ExecStart?
If you start the daemon in the foreground (i.e., use the default Type=simple), it means that systemd will consider it started immediately, and not wait for it to be initialized. In other words, it assumes that whatever communication channels (sockets) have been set up already and that the daemon supports being socket activated. If that is not the case, then services which are ordered after your service might start too early. Clearly, if you know that nothing will ever be ordered After= your service the above is not an issue, and you can use Type=simple without worrying. A better solution would be to patch the service to support Type=dbus/notify or to support socket activation. If that is out of the question, then Type=forking is the safest bet. This mode is a bit more fragile than the other ones, as it relies on systemd being able to figure out what is the main process. Specifying PIDFile= is advised if the daemon supports that. Though it depends on the daemon implementing that correctly. Most (all?) it works just fine :-) HTH, Tom