From 795c3527337ff4f03ae6db08c5df01141565ed96 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 26 Nov 2013 01:55:51 +0000 Subject: always write PID file early for compatibility This reduces the window for a non-existent PID for folks who monitor PIDs (not a great idea anyways). Unfortunately, this change also brings us back to the case where having a PID later (for other process monitors) is beneficial but more unicorn releases exist where we write the PID early. Thanks to Jimmy Soho for reporting this issue. ref: This partially reverts 7d6ac0c17eb29a00a5b74099dbb3d4d015999f27 Folks: please monitor your app with HTTP requests rather than checking processes, a stuck/wedged Ruby VM is still a running one. --- lib/unicorn/http_server.rb | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/lib/unicorn/http_server.rb b/lib/unicorn/http_server.rb index 402f133..f15c8a7 100644 --- a/lib/unicorn/http_server.rb +++ b/lib/unicorn/http_server.rb @@ -136,20 +136,15 @@ class Unicorn::HttpServer trap(:CHLD) { awaken_master } # write pid early for Mongrel compatibility if we're not inheriting sockets - # This was needed for compatibility with some health checker a long time - # ago. This unfortunately has the side effect of clobbering valid PID - # files. - self.pid = config[:pid] unless ENV["UNICORN_FD"] + # This is needed for compatibility some Monit setups at least. + # This unfortunately has the side effect of clobbering valid PID if + # we upgrade and the upgrade breaks during preload_app==true && build_app! + self.pid = config[:pid] self.master_pid = $$ build_app! if preload_app bind_new_listeners! - # Assuming preload_app==false, we drop the pid file after the app is ready - # to process requests. If binding or build_app! fails with - # preload_app==true, we'll never get here and the parent will recover - self.pid = config[:pid] if ENV["UNICORN_FD"] - spawn_missing_workers self end -- cgit v1.2.3-24-ge0c7