about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-11-23 09:52:48 +0000
committerEric Wong <normalperson@yhbt.net>2011-11-23 10:36:39 +0000
commit90d1d769b9af83d6d1464658169e72b9467ab384 (patch)
tree9fdd30d4c9f03e5ad7b7fb8e9e8d22b0e081c6e6
parentb6b36c534ae1b6f8120d3e48eca47463f21b06ea (diff)
downloadzbatery-90d1d769b9af83d6d1464658169e72b9467ab384.tar.gz
zbatery: unlink pid file during graceful shutdown
We don't have the same shutdown sequence as unicorn, there is no
need to leave pid files hanging around during upgrades.  Of
course we can't guarantee this (or any) behavior for
non-graceful shutdowns...
-rw-r--r--lib/zbatery.rb3
-rwxr-xr-xt/t0003-reopen-logs.sh17
2 files changed, 17 insertions, 3 deletions
diff --git a/lib/zbatery.rb b/lib/zbatery.rb
index 08ac5b1..735b1e6 100644
--- a/lib/zbatery.rb
+++ b/lib/zbatery.rb
@@ -75,6 +75,7 @@ module Rainbows
     end
 
     def join
+      at_exit { unlink_pid_safe(pid) if pid }
       trap(:INT) { exit!(0) }
       trap(:TERM) { exit!(0) }
       trap(:QUIT) { Thread.new { stop } }
@@ -102,7 +103,7 @@ module Rainbows
 
     def stop(graceful = true)
       Rainbows.quit!
-      exit!(0) unless graceful
+      graceful ? exit : exit!(0)
     end
 
     def before_fork
diff --git a/t/t0003-reopen-logs.sh b/t/t0003-reopen-logs.sh
index dddc8e3..42c7222 100755
--- a/t/t0003-reopen-logs.sh
+++ b/t/t0003-reopen-logs.sh
@@ -3,7 +3,7 @@
 nr_client=${nr_client-2}
 . ./test-lib.sh
 
-t_plan 19 "reopen rotated logs"
+t_plan 20 "reopen rotated logs"
 
 t_begin "setup and startup" && {
         rtmpfiles curl_out curl_err r_rot
@@ -96,7 +96,20 @@ t_begin "server is now writing logs to new stderr" && {
 }
 
 t_begin "stop server" && {
-        kill $zbatery_pid
+        kill -QUIT $zbatery_pid
+}
+
+t_begin "wait and ensure pid file no longer exists" && {
+        max=0
+        while test $max -lt 60 && kill -0 $zbatery_pid 2>/dev/null
+        do
+                sleep 1
+                max=$(($max + 1))
+        done
+        if test -f "$pid"
+        then
+                die "$pid should be unlinked at shutdown"
+        fi
 }
 
 dbgcat r_err