From a827e37371be78ba7eda63fa6edca1074c431524 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Mon, 29 Apr 2013 19:46:19 -0400 Subject: man: clarify what Restart= means Related to https://bugzilla.redhat.com/show_bug.cgi?id=957135. --- man/systemd.service.xml | 77 ++++++++++++++++++++++++++++++++++--------------- src/core/service.c | 3 ++ 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/man/systemd.service.xml b/man/systemd.service.xml index b82a5c1817..09d1d5ff7d 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 cf0bbe05fc..5803f798e0 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; -- cgit v1.2.3-54-g00ecf