From a9becdd65bb4b64675bc0c109d14ab12b1ecd2b7 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Tue, 21 Oct 2014 18:44:09 -0400 Subject: sd-daemon,man: ignore missing $WATCHDOG_PID Systemd 209 started setting $WATCHDOG_PID, and sd-daemon watch was modified to check for this variable. This means that sd_watchdog_enabled() stopped working with previous versions of systemd. But sd-event is a public library and API and we must keep it working even when a program compiled with a newer version of the libary is used on a system running an older version of the manager. getenv() and unsetenv() are fairly expensive calls, so optimize sd_watchdog_enabled() by not calling them when unnecessary. man: centralize the description of $WATCHDOG_PID and $WATCHDOG_USEC in the sd_watchdog_enabled manpage. It is better not to repeat the same stuff in two places. --- man/sd_watchdog_enabled.xml | 53 ++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 17 deletions(-) (limited to 'man/sd_watchdog_enabled.xml') diff --git a/man/sd_watchdog_enabled.xml b/man/sd_watchdog_enabled.xml index 4164027640..462d7c6617 100644 --- a/man/sd_watchdog_enabled.xml +++ b/man/sd_watchdog_enabled.xml @@ -69,30 +69,37 @@ which the manager will act on the service if it did not get such a notification. + If the $WATCHDOG_USEC + environment variable is set, and the + $WATCHDOG_PID variable is unset or + set to the PID of the current process, the service + manager expects notifications from this process. The + manager will usually terminate a service when it does + not get a notification message within the specified + time after startup and after each previous message. It + is recommended that a daemon sends a keep-alive + notification message to the service manager every half + of the time returned here. Notification messages may + be sent with + sd_notify3 + with a message string of + WATCHDOG=1. + If the unset_environment parameter is non-zero, sd_watchdog_enabled() will unset the $WATCHDOG_USEC and $WATCHDOG_PID environment variables - before returning (regardless of whether the function call - itself succeeded or not). Further calls to - sd_watchdog_enabled() will then - return with zero, but the variable is no longer - inherited by child processes. + before returning (regardless of whether the function + call itself succeeded or not). Those variables are no + longer inherited by child processes. Further calls to + sd_watchdog_enabled() will also + return with zero. If the usec parameter is non-NULL, sd_watchdog_enabled() - will return the timeout in µs for the watchdog - logic. The service manager will usually terminate a - service when it did not get a notification message - within the specified time after startup and after each - previous message. It is recommended that a daemon - sends a keep-alive notification message to the service - manager every half of the time returned - here. Notification messages may be sent with - sd_notify3 - with a message string of - WATCHDOG=1. + will write the timeout in µs for the watchdog + logic to it. To enable service supervision with the watchdog logic, use WatchdogSec= in service @@ -126,7 +133,6 @@ of the current process, under the assumption that in that case, the variables were set for a different process further up the process tree. - @@ -156,6 +162,19 @@ + + History + + The watchdog functionality and the + $WATCHDOG_USEC variable were + added in systemd-41. + + sd_watchdog_enabled() + function was added in systemd-209. Since that version + the $WATCHDOG_PID variable is also + set. + + See Also -- cgit v1.2.3-54-g00ecf