Когда вы убиваете единорога, вы вызываете простои, пока единорог не сможет снова начать работу. Когда вы используете сигнал USR2, единорог сначала запускает новых работников, а затем, когда они бегут, убивает старых работников. В основном это все о том, чтобы избавиться от необходимости «выключать» единорога.
Обратите внимание, что предполагается, что у вас есть документированный хук before_fork
в вашей конфигурации единорога, чтобы справиться с убийством старых рабочих, если будет найден файл ".oldbin", содержащий PID старого единорога процесс:
before_fork do |server, worker|
# a .oldbin file exists if unicorn was gracefully restarted with a USR2 signal
# we should terminate the old process now that we're up and running
old_pid = "#{pids_dir}/unicorn.pid.oldbin"
if File.exists?(old_pid)
begin
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
# someone else did our job for us
end
end
end