diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index b82a5c181..09d1d5ff7 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -553,8 +553,8 @@
WatchdogSec=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
sd_notify3
regularly with "WATCHDOG=1" (i.e. the
@@ -588,37 +588,66 @@
Restart=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
+ ExecStartPre=,
+ ExecStartPost=,
+ ExecStopPre=,
+ ExecStopPost=, or
+ ExecReload=.
+ 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.
+
+ Takes one of
,
,
,
- or
+ , or
. If set to
(the default) the
- service will not be restarted when it
- exits. If set to
+ service will not be restarted. If set to
it will be
- restarted only when it exited cleanly,
- i.e. terminated with an exit code of
- 0. If set to
- 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 SuccessExitStatus=.
+ If set to
+ 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
- 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
+ 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
the service
will be restarted regardless whether
it exited cleanly or not, got
terminated abnormally by a signal or
- hit a timeout.
+ hit a timeout.
+
+ In addition to the above settings,
+ the service will not be restarted if the
+ exit code or signal is specified in
+ RestartPreventExitStatus=
+ (see below).
@@ -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:
"SuccessExitStatus=1 2 8
SIGKILL", ensures that exit
codes 1, 2, 8 and the termination
diff --git a/src/core/service.c b/src/core/service.c
index 9ceff42e1..9682fc33a 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -1479,6 +1479,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;