On Sun, Aug 07, 2011 at 10:31:02AM +0200, Marc Haber wrote: > when the daemon refuses to die (for example because the init script > searches for the pidfile in the wrong place), the init script goes > into an endless loop: > > if [ -n $pid ]; then > while kill -0 $pid 2>/dev/null; do > log_progress_msg "waiting for pid $pid to die" > sleep 1 > done > fi > > this causes the shutdown process to go into an uninterruptible endless > loop, preventing the system from shutting down cleanly and forces a > hard shutdown without properly umounting the file systems. > > Please add a counter and don't wait indefinetely for the daemon to die.
I have exactly this problem - server fails to shutdown because it can't stop a running bind daemon: # /etc/init.d/bind9 stop Stopping domain name service...: bind9 waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die waiting for pid 3679 to die Proposed patch for bind init script is attached. -- Valentin
--- bind9.dist 2011-09-09 17:16:47.000000000 +0200 +++ bind9 2011-09-09 17:18:14.000000000 +0200 @@ -89,10 +89,13 @@ --pidfile ${PIDFILE} -- $OPTIONS fi if [ -n $pid ]; then - while kill -0 $pid 2>/dev/null; do - log_progress_msg "waiting for pid $pid to die" - sleep 1 - done + count=1 + while kill -0 $pid 2>/dev/null && [ $count -lt 60 ]; do + log_progress_msg "waiting for pid $pid to die" + sleep 1 + count=$(($count+1)) + done + [ $count -lt 60 ] || log_end_msg 1 fi log_end_msg 0 ;;