necesito para comenzar a 4 trabajadores resque así que utilicé siguiente comandomodo Varios trabajadores resque crear procesos adicionales
bundle exec rake environment resque:workers RAILS_ENV=production COUNT=4 QUEUE=* VERBOSE=1 PIDFILE=tmp/pids/resque_worker.pid >> log/resque_worker_QUEUE.log
Pero ir a la interfaz web, que en realidad estaba empezando 8 trabajadores. Hubo dos procesos principales con 4 procesos hijo cada uno. A continuación se muestra una vista en árbol del proceso:
ruby /code_base/bundle/ruby/1.9.1/bin/rake environment resque:workers RAILS_ENV=production COUNT=4 QUEUE=* VERBOSE=1 PIDFILE=tmp/pids/resque_worker.pid \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * \_ [ruby] ruby /code_base/bundle/ruby/1.9.1/bin/rake environment resque:workers RAILS_ENV=production COUNT=4 QUEUE=* VERBOSE=1 PIDFILE=tmp/pids/resque_worker.pid \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * \_ [ruby]
¿No se pudo saber qué está causando el inicio del proceso adicional?
He pasado por ese archivo de doc y script anteriormente pero estamos usando monit. De acuerdo con esa secuencia de comandos, parece que cada empleado resque se mata después del tiempo WORKER_TIMEOUT. Ahora, incluso si realizo una implementación nueva, el trabajador aún puede estar usando el código anterior. Por lo tanto, en el peor de los casos, WORKER_TIMEOUT demora cargar al trabajador con un código nuevo que en algún momento puede ser un problema. ¿Alguna idea sobre eso? – bikashp
No hay nada de malo en dejar que un trabajo existente que se está ejecutando se complete antes de matar al trabajador siempre que active un nuevo empleado con el código recién implementado. La clave es enviar una señal de QUIT suave al trabajador para que salga cuando finalice el trabajo en ejecución. Entonces, sí, puede hacer que un trabajador ejecute un código antiguo, pero está en un trabajo que comenzó antes de la implementación del nuevo código. – Winfield
Un problema más que veo con ese enfoque es cuando Dios falla a sí mismo. A medida que los trabajadores mueren después de WORKER_TIMEOUT, no habrá trabajos de procesamiento de trabajadores. – bikashp