capistrano: clean up unicorn:terminate task.

Do a SIGQUIT (graceful shutdown, allow workers to finish current
request) before doing a SIGTERM (immediate shutdown).
This commit is contained in:
evazion
2019-08-07 22:11:07 -05:00
parent c225d54de1
commit bfffb57c13

View File

@@ -1,16 +1,25 @@
# https://bogomips.org/unicorn/SIGNALS.html
namespace :unicorn do
desc "Terminate unicorn processes (blocks until complete)"
task :terminate do
on roles(:app) do
execute "[[ -n $(pgrep -f unicorn) ]] && pgrep -f unicorn | xargs kill -SIGTERM"
sleep(5)
within current_path do
kill_unicorn("SIGQUIT")
sleep(10)
kill_unicorn("SIGTERM")
sleep(2)
kill_unicorn("SIGKILL")
end
end
end
desc "Kills unicorn processes (blocks until complete)"
task :kill do
on roles(:app) do
execute "[[ -n $(pgrep -f unicorn) ]] && pgrep -f unicorn | xargs kill -SIGKILL"
def unicorn_running?
test("[ -f #{fetch(:unicorn_pid)} ] && pkill --count --pidfile #{fetch(:unicorn_pid)}")
end
def kill_unicorn(signal)
if unicorn_running?
execute :pkill, "--signal #{signal}", "--pidfile #{fetch(:unicorn_pid)}"
end
end
end