[systemd-commits] man/systemd.service.xml src/core

Zbigniew Jędrzejewski-Szmek zbyszek at kemper.freedesktop.org
Mon Apr 29 16:56:28 PDT 2013


 man/systemd.service.xml |   77 +++++++++++++++++++++++++++++++++---------------
 src/core/service.c      |    3 +
 2 files changed, 56 insertions(+), 24 deletions(-)

New commits:
commit a827e37371be78ba7eda63fa6edca1074c431524
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Mon Apr 29 19:46:19 2013 -0400

    man: clarify what Restart= means
    
    Related to https://bugzilla.redhat.com/show_bug.cgi?id=957135.

diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index b82a5c1..09d1d5f 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -553,8 +553,8 @@
                         <varlistentry>
                                 <term><varname>WatchdogSec=</varname></term>
                                 <listitem><para>Configures the
-                                watchdog timeout for a service. This
-                                is activated when the start-up is
+                                watchdog timeout for a service. The
+                                watchdog is activated when the start-up is
                                 completed. The service must call
                                 <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
                                 regularly with "WATCHDOG=1" (i.e. the
@@ -588,37 +588,66 @@
                         <varlistentry>
                                 <term><varname>Restart=</varname></term>
                                 <listitem><para>Configures whether the
-                                main service process shall be
-                                restarted when it exits. Takes one of
+                                service shall be restarted when the
+                                service process exits, is killed,
+                                or a timeout is reached. The service
+                                process may be the main service
+                                process, but also one of the processes
+                                specified with
+                                <varname>ExecStartPre=</varname>,
+                                <varname>ExecStartPost=</varname>,
+                                <varname>ExecStopPre=</varname>,
+                                <varname>ExecStopPost=</varname>, or
+                                <varname>ExecReload=</varname>.
+                                When the death of the process is a
+                                result of systemd operation (e.g. service
+                                stop or restart), the service will not be
+                                restarted. Timeouts include missing
+                                the watchdog "keep-alive ping"
+                                deadline and a service start, reload,
+                                and stop operation timeouts.</para>
+
+                                <para>Takes one of
                                 <option>no</option>,
                                 <option>on-success</option>,
                                 <option>on-failure</option>,
-                                <option>on-abort</option> or
+                                <option>on-abort</option>, or
                                 <option>always</option>. If set to
                                 <option>no</option> (the default) the
-                                service will not be restarted when it
-                                exits. If set to
+                                service will not be restarted. If set to
                                 <option>on-success</option> it will be
-                                restarted only when it exited cleanly,
-                                i.e. terminated with an exit code of
-                                0. If set to
-                                <option>on-failure</option> it will be
-                                restarted only when it exited with an
-                                exit code not equaling 0, when
-                                terminated by a signal (including on
+                                restarted only when the service process
+                                exits cleanly.
+                                In this context, a clean exit means
+                                an exit code of 0, or one of the signals
+                                SIGHUP, SIGINT, SIGTERM, or SIGPIPE, and
+                                additonally, exit statuses and signals
+                                specified in <varname>SuccessExitStatus=</varname>.
+                                If set to <option>on-failure</option>
+                                the service will be restarted when the
+                                process exits with an nonzero exit code,
+                                is terminated by a signal (including on
                                 core dump), when an operation (such as
-                                service reload) times out or when the
-                                configured watchdog timeout is
-                                triggered. If set to
-                                <option>on-abort</option> it will be
-                                restarted only if it exits due to
-                                reception of an uncaught signal
-                                (including on core dump). If set to
+                                service reload) times out, and when the
+                                configured watchdog timeout is triggered.
+                                If set to
+                                <option>on-abort</option> the service
+                                will be restarted only if the service
+                                process exits due to an uncaught
+                                signal not specified as a clean exit
+                                status.
+                                If set to
                                 <option>always</option> the service
                                 will be restarted regardless whether
                                 it exited cleanly or not, got
                                 terminated abnormally by a signal or
-                                hit a timeout.</para></listitem>
+                                hit a timeout.</para>
+
+                                <para>In addition to the above settings,
+                                the service will not be restarted if the
+                                exit code or signal is specified in
+                                <varname>RestartPreventExitStatus=</varname>
+                                (see below).</para></listitem>
                         </varlistentry>
 
                         <varlistentry>
@@ -631,8 +660,8 @@
                                 code 0 and the signals SIGHUP, SIGINT,
                                 SIGTERM and SIGPIPE. Exit status
                                 definitions can either be numeric exit
-                                codes or termination signal names, and
-                                are separated by spaces. Example:
+                                codes or termination signal names,
+                                separated by spaces. Example:
                                 "<literal>SuccessExitStatus=1 2 8
                                 SIGKILL</literal>", ensures that exit
                                 codes 1, 2, 8 and the termination
diff --git a/src/core/service.c b/src/core/service.c
index cf0bbe0..5803f79 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -1466,6 +1466,9 @@ static int service_search_main_pid(Service *s) {
         r = unit_watch_pid(UNIT(s), pid);
         if (r < 0)
                 /* FIXME: we need to do something here */
+                log_warning_unit(UNIT(s)->id,
+                                 "Failed to watch PID %lu from service %s",
+                                 (unsigned long) pid, UNIT(s)->id);
                 return r;
 
         return 0;



More information about the systemd-commits mailing list