[tor/master] fix and enable systemd watchdog

commit a8999acc3bca05f1aaa23399c7d5f7a5e51789a4 Author: Tomasz Torcz <tomek@pipebreaker.pl> Date: Fri Jan 9 23:42:16 2015 +0100 fix and enable systemd watchdog There were following problems: - configure.ac wrongly checked for defined HAVE_SYSTEMD; this wasn't working, so the watchdog code was not compiled in. Replace library search with explicit version check - sd_notify() watchdog call was unsetting NOTIFY_SOCKET from env; this means only first "watchdog ping" was delivered, each subsequent one did not have socket to be sent to and systemd was killing service - after those fixes, enable Watchdog in systemd unit with one minute intervals --- configure.ac | 7 +++---- contrib/dist/tor.service.in | 1 + src/or/main.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 1fd5960..dedfb7e 100644 --- a/configure.ac +++ b/configure.ac @@ -136,6 +136,9 @@ fi AC_SUBST(TOR_SYSTEMD_CFLAGS) AC_SUBST(TOR_SYSTEMD_LIBS) +PKG_CHECK_MODULES(SYSTEMD209, [systemd >= 209], + [AC_DEFINE(HAVE_SYSTEMD_209,1,[Have systemd v209 or more])], []) + if test x$enable_systemd = xyes -a x$have_systemd != xyes ; then AC_MSG_ERROR([Explicitly requested systemd support, but systemd not found]) fi @@ -155,10 +158,6 @@ cpu workers lock up here, so I will disable threads.]) esac fi -ifdef([HAVE_SYSTEMD], [ -AC_SEARCH_LIBS([sd_watchdog_enabled], [systemd-daemon], - [AC_DEFINE(HAVE_SYSTEMD_209,1,[Have systemd v209 or more])], []) -]) case $host in *-*-solaris* ) diff --git a/contrib/dist/tor.service.in b/contrib/dist/tor.service.in index 607615a..f50075d 100644 --- a/contrib/dist/tor.service.in +++ b/contrib/dist/tor.service.in @@ -11,6 +11,7 @@ ExecReload = /bin/kill -HUP ${MAINPID} KillSignal = SIGINT TimeoutSec = 30 Restart = on-failure +WatchdogSec = 1m LimitNOFILE = 32768 # Hardening diff --git a/src/or/main.c b/src/or/main.c index 1b43904..bf4e6db 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1776,7 +1776,7 @@ static periodic_timer_t *systemd_watchdog_timer = NULL; static void systemd_watchdog_callback(periodic_timer_t *timer, void *arg) { - sd_notify(1, "WATCHDOG=1"); + sd_notify(0, "WATCHDOG=1"); } #endif
participants (1)
-
nickm@torproject.org