I am writing my first
systemd unit file.
Type, there are a few choices:
simple, etc. I have read the Redhat Documentation on this topic (Table 9.9) , but still am not sure when I should use which option.
When you start the service manually from the command line (without using the
nohupprefix command or the
& suffix to run it in the background), what happens?
a) If the service starts and keeps running, and the prompt does not return until you press Control-C or stop the service in some other way: then
Type = simple is the right choice.
b) If the prompt returns but the service keeps running in the background (i.e. the service daemonizes itself on its own), then
Type = forking is the right choice.
c) If the service does its job and returns to the prompt without leaving anything running (i.e. the service just adjusts some kernel settings, sends a command to something else or does something similar), then
Type = oneshot is probably the right choice. In this case,
ExecStart of the service might be the command to "set" something, and
ExecStop would be the corresponding command to "unset" it. This type usually benefits of
RemainAfterExit=true, so systemd will keep track of the "state" of this service according to whether the thing was most recently "set" or "unset".
Type values are special cases. For example, if the service utilizes a D-Bus connection, then
Type = dbus might be the best choice. It makes
systemd aware of the fact, and then systemd will track this service (and anything that depends on it) by the presence of this service on the D-Bus.