diff --git a/lib/puma/cluster.rb b/lib/puma/cluster.rb index d3da53d6a8..6a44eaa3c6 100644 --- a/lib/puma/cluster.rb +++ b/lib/puma/cluster.rb @@ -216,8 +216,10 @@ def check_workers(force=false) log "- Stopping #{w.pid} for phased upgrade..." end - w.term - log "- #{w.signal} sent to #{w.pid}..." + unless w.term? + w.term + log "- #{w.signal} sent to #{w.pid}..." + end end end end @@ -266,6 +268,7 @@ def worker(index, master) server = start_server Signal.trap "SIGTERM" do + @worker_write << "e#{Process.pid}\n" rescue nil server.stop end @@ -497,8 +500,11 @@ def run w.boot! log "- Worker #{w.index} (pid: #{pid}) booted, phase: #{w.phase}" force_check = true + when "e" + # external term, see worker method, Signal.trap "SIGTERM" + w.instance_variable_set :@term, true when "t" - w.term + w.term unless w.term? force_check = true when "p" w.ping!(result.sub(/^\d+/,'').chomp)