2011-09-01 7 views
6

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?

Respuesta

13

No desea utilizar la opción COUNT = n en producción, ya que ejecuta cada trabajador en una secuencia en lugar de un proceso por separado, lo que es mucho menos estable.

docs Resque Oficial:

Running Multiple Workers 

At GitHub we use god to start and stop multiple workers. A sample god configuration file is included under examples/god. We recommend this method. 

If you'd like to run multiple workers in development mode, you can do so using the resque:workers rake task: 

$ COUNT=5 QUEUE=* rake resque:workers 
This will spawn five Resque workers, each in its own thread. Hitting ctrl-c should be sufficient to stop them all. 

Here's the example God monitoring/configuration file que se incluye con Resque ejecutar múltiples procesos, y here's an example for monit.

+0

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

+0

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

+0

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

Cuestiones relacionadas