- <option>no</option> (the default) the
- service will not be restarted when it
- exits. 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 equalling 0, when
- terminated by a signal, when an
- operation 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. 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>
+ <option>no</option> (the default), the
+ service will not be restarted. If set to
+ <option>on-success</option>, it will be
+ 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
+ <constant>SIGHUP</constant>, <constant>SIGINT</constant>, <constant>SIGTERM</constant>, or <constant>SIGPIPE</constant>, and
+ additionally, 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, 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>on-watchdog</option>, the service
+ will be restarted only if the watchdog
+ timeout for the service expires.
+ If set to
+ <option>always</option>, the service
+ will be restarted regardless of whether
+ it exited cleanly or not, got
+ terminated abnormally by a signal or
+ 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>
+ <term><varname>SuccessExitStatus=</varname></term>
+ <listitem><para>Takes a list of exit
+ status definitions that when returned
+ by the main service process will be
+ considered successful termination, in
+ addition to the normal successful exit
+ code 0 and the signals <constant>SIGHUP</constant>, <constant>SIGINT</constant>,
+ <constant>SIGTERM</constant>, and <constant>SIGPIPE</constant>. Exit status
+ definitions can either be numeric exit
+ codes or termination signal names,
+ separated by spaces. Signals will only
+ be considered if the service does not implement
+ a signal handler and exits as a direct result
+ of receiving the signal. For example:
+ <programlisting>SuccessExitStatus=1 2 8 <constant>SIGKILL</constant></programlisting>
+ ensures that exit codes 1, 2, 8 and
+ the termination signal
+ <constant>SIGKILL</constant> are
+ considered clean service terminations.
+ </para>
+
+ <para>Note that if a process has a
+ signal handler installed and exits by
+ calling
+ <citerefentry><refentrytitle>_exit</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+ in response to a signal, the
+ information about the signal is lost.
+ Programs should instead perform cleanup and kill themselves with the same signal instead. See
+ <ulink url="http://www.cons.org/cracauer/sigint.html">Proper handling of SIGINT/SIGQUIT — How to be a proper program</ulink>.</para>
+
+ <para>This option may appear more than once
+ in which case the list of successful
+ exit statuses is merged. If the empty
+ string is assigned to this option, the
+ list is reset, all prior assignments
+ of this option will have no
+ effect.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>RestartPreventExitStatus=</varname></term>
+ <listitem><para>Takes a list of exit
+ status definitions that when returned
+ by the main service process will
+ prevent automatic service restarts
+ regardless of the restart setting
+ configured with
+ <varname>Restart=</varname>. Exit
+ status definitions can either be
+ numeric exit codes or termination
+ signal names, and are separated by
+ spaces. Defaults to the empty list, so
+ that by default no exit status is
+ excluded from the configured restart
+ logic. Example:
+ <literal>RestartPreventExitStatus=1 6
+ SIGABRT</literal>, ensures that exit
+ codes 1 and 6 and the termination
+ signal SIGABRT will not result in
+ automatic service restarting. This
+ option may appear more than once in
+ which case the list of restart preventing
+ statuses is merged. If the empty
+ string is assigned to this option, the
+ list is reset, all prior assignments
+ of this option will have no
+ effect.</para></listitem>