man: clarify what Restart= means

Related to https://bugzilla.redhat.com/show_bug.cgi?id=957135.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2013-04-29 19:46:19 -04:00
parent d7e011e5bf
commit a827e37371
2 changed files with 56 additions and 24 deletions

View file

@ -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

View file

@ -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;