Pregunta

Estoy un poco confundido acerca de mi estrategia de implementación aquí, al implementar, ¿bajo qué circunstancias querría enviar un reload ¿señal al unicornio?Por ejemplo en mi caso sería como:

sudo kill -s USR2 `cat /home/deploy/apps/my_app/current/tmp/pids/unicorn.pid`

He estado implementando mis aplicaciones eliminando ese pid y luego iniciando Unicorn nuevamente mediante algo como:

bundle exec unicorn -c config/unicorn/production.rb -E production -D

Me pregunto por qué querría usar la recarga.¿Puedo obtener algún rendimiento para mi implementación al hacerlo?

¿Fue útil?

Solución

Cuando matas a un unicornio, provocas un tiempo de inactividad, hasta que el unicornio pueda volver a funcionar.Cuando usas la señal USR2, Unicorn inicia nuevos trabajadores primero, luego, una vez que se están ejecutando, mata a los trabajadores antiguos.Básicamente se trata de eliminar la necesidad de "apagar" el unicornio.

Tenga en cuenta que se supone que tiene la documentación before_fork enganche en su configuración de unicornio, para poder manejar la eliminación de los trabajadores antiguos, debe encontrarse un archivo ".oldbin" que contenga el PID del antiguo proceso de unicornio:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top