diff options
author | Henri Chain <henri.chain@enioka.com> | 2021-02-24 16:13:21 +0100 |
---|---|---|
committer | Henri Chain <henri.chain@enioka.com> | 2021-11-08 10:15:23 +0100 |
commit | 596e447076b27d103a30c26a68626e9820ac705b (patch) | |
tree | 8bad87c85bfa6a967dc8d09ba2df614982915a12 /man | |
parent | Merge pull request #20056 from calestyo/split-up-sysusers.d-systemd.conf.in (diff) | |
download | systemd-596e447076b27d103a30c26a68626e9820ac705b.tar.xz systemd-596e447076b27d103a30c26a68626e9820ac705b.zip |
Reintroduce ExitType
This introduces `ExitType=main|cgroup` for services.
Similar to how `Type` specifies the launch of a service, `ExitType` is
concerned with how systemd determines that a service exited.
- If set to `main` (the current behavior), the service manager will consider
the unit stopped when the main process exits.
- The `cgroup` exit type is meant for applications whose forking model is not
known ahead of time and which might not have a specific main process.
The service will stay running as long as at least one process in the cgroup
is running. This is intended for transient or automatically generated
services, such as graphical applications inside of a desktop environment.
Motivation for this is #16805. The original PR (#18782) was reverted (#20073)
after realizing that the exit status of "the last process in the cgroup" can't
reliably be known (#19385)
This version instead uses the main process exit status if there is one and just
listens to the cgroup empty event otherwise.
The advantages of a service with `ExitType=cgroup` over scopes are:
- Integrated logging / stdout redirection
- Avoids the race / synchronisation issue between launch and scope creation
- More extensive use of drop-ins and thus distro-level configuration:
by moving from scopes to services we can have drop ins that will affect
properties that can only be set during service creation,
like `OOMPolicy` and security-related properties
- It makes systemd-xdg-autostart-generator usable by fixing [1], as obviously
only services can be used in the generator, not scopes.
[1] https://bugs.kde.org/show_bug.cgi?id=433299
Diffstat (limited to 'man')
-rw-r--r-- | man/org.freedesktop.systemd1.xml | 6 | ||||
-rw-r--r-- | man/systemd.service.xml | 25 |
2 files changed, 31 insertions, 0 deletions
diff --git a/man/org.freedesktop.systemd1.xml b/man/org.freedesktop.systemd1.xml index c9f71a6dca..af429f354b 100644 --- a/man/org.freedesktop.systemd1.xml +++ b/man/org.freedesktop.systemd1.xml @@ -2304,6 +2304,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s Type = '...'; @org.freedesktop.DBus.Property.EmitsChangedSignal("const") + readonly s ExitType = '...'; + @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s Restart = '...'; @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s PIDFile = '...'; @@ -2894,6 +2896,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { <!--property Type is not documented!--> + <!--property ExitType is not documented!--> + <!--property Restart is not documented!--> <!--property PIDFile is not documented!--> @@ -3420,6 +3424,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { <variablelist class="dbus-property" generated="True" extra-ref="Type"/> + <variablelist class="dbus-property" generated="True" extra-ref="ExitType"/> + <variablelist class="dbus-property" generated="True" extra-ref="Restart"/> <variablelist class="dbus-property" generated="True" extra-ref="PIDFile"/> diff --git a/man/systemd.service.xml b/man/systemd.service.xml index 5042066d0d..95cb0aca3d 100644 --- a/man/systemd.service.xml +++ b/man/systemd.service.xml @@ -256,6 +256,31 @@ </varlistentry> <varlistentry> + <term><varname>ExitType=</varname></term> + + <listitem> + <para>Specifies when the manager should consider the service to be finished. One of <option>main</option> or + <option>cgroup</option>:</para> + + <itemizedlist> + <listitem><para>If set to <option>main</option> (the default), the service manager + will consider the unit stopped when the main process, which is determined according to the + <varname>Type=</varname>, exits. Consequently, it cannot be used with + <varname>Type=</varname><option>oneshot</option>.</para></listitem> + + <listitem><para>If set to <option>cgroup</option>, the service will be considered running as long as at + least one process in the cgroup has not exited.</para></listitem> + </itemizedlist> + + <para>It is generally recommended to use <varname>ExitType=</varname><option>main</option> when a service has + a known forking model and a main process can reliably be determined. <varname>ExitType=</varname> + <option>cgroup</option> is meant for applications whose forking model is not known ahead of time and which + might not have a specific main process. It is well suited for transient or automatically generated services, + such as graphical applications inside of a desktop environment.</para> + </listitem> + </varlistentry> + + <varlistentry> <term><varname>RemainAfterExit=</varname></term> <listitem><para>Takes a boolean value that specifies whether |