What is the difference between systemd's 'oneshot' and 'simple' service types?

Systemd

Systemd Problem Overview


What is the difference between systemd service Type oneshot and simple? This [link][1] states to use simple instead of oneshot for timers. I am not able to understand it correctly.

[1]: https://jason.the-graham.com/2013/03/06/how-to-use-systemd-timers/ "link"

Systemd Solutions


Solution 1 - Systemd

The Type=oneshot service unit:

  • blocks on a start operation until the first process exits, and its state will be reported as "activating";

  • once the first process exits, transitions from "activating" straight to "inactive", unless RemainAfterExit=true is set (in which case it becomes "active" with no processes!);

  • may have any number (0 or more) of ExecStart= directives which will be executed sequentially (waiting for each started process to exit before starting the next one);

  • may leave out ExecStart= but have ExecStop= (useful together with RemainAfterExit=true for arranging things to run on system shutdown).

The Type=simple service unit:

  • does not block on a start operation (i. e. becomes "active" immediately after forking off the first process, even if it is still initializing!);

  • once the first process exits, transitions from "active" to "inactive" (there is no RemainAfterExit= option);

  • is generally discouraged because there is no way to distinguish situations like "exited on start because of a configuration error" from "crashed after 500ms of runtime" and suchlike.

Both Type=oneshot and Type=simple units:

  • ignore any children of the first process, so do not use these modes with forking processes (note: you may use Type=oneshot with KillMode=none, but only do this if you know what you are doing).

Solution 2 - Systemd

From systemd's point of view, Type=simple is kind of fire and forget. Systemd just forks a process defined in ExecStart= and goes on its way, even if the process fails to start.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDinesh P.R.View Question on Stackoverflow
Solution 1 - SystemdintelfxView Answer on Stackoverflow
Solution 2 - SystemdUmutView Answer on Stackoverflow