Usertags: origin-ubuntu bionic ubuntu-patch
On Ubuntu 14.04, it was noticed that "sudo service watchdog start"
command was sometimes hanging indefinitely. Investigation revealed
that the watchdog init script tries sending a SIGTERM to the process
present in the pidfile for the wd_keepalive daemon. However, the
init script does not seem to clear pidfiles while stopping services,
so the pidfile is often stale. This resulted in SIGTERM being sent
not to wd_keepalive, but to a service which was not responding to
SIGTERM, causing the command mentioned to hang.
This issue seems to be present even on the latest version of the
The issue was worked around by explicitly specifiying the name
of the executable to stop in "start-stop-daemon --stop". The man
page for start-stop-daemon explicitly mentions that not doing
so while supplying a pidfile can cause unintended processes to
be acted upon.
This issue probably only reproduces on systems where the watchdog
service is stopped and restarted, which might not be very common.
In Ubuntu, the attached patch was applied to fix the issue.
[ Arijit Banerjee ]
* Fix bug where SIGTERM is sent to stale pid (LP: #1750942)
Thanks for considering the patch. Apologies for any inaccuracies
while reporting this, it's my first patch to Debian.
-- System Information:
Debian Release: jessie/sid
APT prefers trusty-updates
APT policy: (500, 'trusty-updates'), (500, 'trusty')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 3.13.0-52-generic (SMP w/3 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -u watchdog-5.15/debian/changelog watchdog-5.15/debian/changelog
only in patch2:
@@ -54,7 +54,7 @@
# make sure that wd_keepalive is stopped
log_begin_msg "Stopping watchdog keepalive daemon..."
start-stop-daemon --stop --quiet --oknodo --retry $STOP_RETRY_SCHEDULE \
- --pidfile /var/run/$KEEPALIVE_NAME.pid
+ --pidfile /var/run/$KEEPALIVE_NAME.pid --exec $KEEPALIVE_DAEMON
# also remove the sendsigs omit file
@@ -74,7 +74,7 @@
log_begin_msg "Stopping watchdog daemon..."
start-stop-daemon --stop --quiet --retry $STOP_RETRY_SCHEDULE \
- --pidfile /var/run/$NAME.pid
+ --pidfile /var/run/$NAME.pid --exec $DAEMON
if [ $run_wd_keepalive = 1 ]
@@ -99,7 +99,7 @@
log_daemon_msg "Restarting $NAME"
log_progress_msg "Stopping $NAME daemon..."
start-stop-daemon --stop --pidfile /var/run/$NAME.pid --quiet \
- --retry $STOP_RETRY_SCHEDULE || log_end_msg $?
+ --retry $STOP_RETRY_SCHEDULE --exec $DAEMON || log_end_msg $?
log_progress_msg "Starting $NAME daemon..."
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $watchdog_options