7 votos

Cómo iniciar una tarea de rake con upstart

Estoy tratando de configurar un Resque trabajador como un Advenedizo init script para ser utilizado por Monit en una aplicación Rails. Yo no soy un sysop y he tratado de escribir este usando ejemplos de otros script de init tenemos en nuestro servidor, esto es lo que obtuve:

start on startup
stop on shutdown

pre-start script
   cd /var/www/my-app/current
end script

script
   exec bundle exec rake environment resque:work RAILS_ENV=staging PIDFILE=/var/run/resque.pid QUEUE=sync >> /var/log/resque.log
end script

Pero no funciona, si me intente sudo start resque de recibir:

resque start/running, process XXXX

Nada se inicia hasta donde yo sé, no hay Resque proceso de ser encontrado ni hay archivo de registro. Estoy bastante perdido en cuanto a cómo se trabaja para conseguirlo.

Actualización: he encontrado el archivo de syslog y dice:

Nov  4 17:20:09 fantasysports init: resque main process (3057) terminated with status 2

Actualización: he probado a ejecutarlo usando sudo (sí, eso no tiene sentido!) y se eliminan de la redirección de la salida para el archivo de registro y ahora tengo un diferente código de estado:

Nov  4 17:29:44 fantasysports init: resque main process (3276) terminated with status 10

Actualización: Terminó abandonando a Upstart para init.d, start-stop-daemon es mucho mejor documentado y me da el control completo de lo que está pasando.

5voto

Ed Ball Puntos 1341

Aquí está cómo hacerlo... Esto también se suma en la rvm

start on startup
stop on starting rcS

chdir /data/pusher/current
env RAILS_ENV=production
script
  /usr/local/bin/rvm-shell '1.9.2@app' -c 'JOBS_PER_FORK=25 RAILS_ENV=production QUEUE=app_production bundle exec rake --trace resque:work >> /data/app/current/log/app-worker.production.log 2>&1'
end script

Edit: aquí es cómo lo hago para correr como un usuario diferente... chdir no parece honrado... por lo que es clase de hacky

start on runlevel [2345]
stop on starting rcS

chdir /data/app/current
env RAILS_ENV=production
script
        sudo -u user -s -- "cd /data/app/current; export RAILS_ENV=production; /usr/local/bin/rvm-shell '1.9.2-p180@app' -c 'QUEUE=app_production bundle exec rake resque:work >> /data/app/current/log/app-worker.production.log 2>&1'"
end script

Necesita bastante mucho que cambiar en el directorio correcto y establecer el RAILS_ENV en el comando sudo

1voto

Simon Jez Puntos 351

La forma en que el RVM manual, en el artículo de "integración", recomienda "el Uso de RVM y Ruby basado en los servicios que se inician a través de init.d o upstart" es usar RVM alias y envoltorios.

Tuve una situación en la que tenía que supervisar un bluepill proceso. Este proceso es un demonio así un proceso en el que las horquillas de 2 veces. Comenzando con la rvm-shell comando añade un tercer tenedor... Que causó Advenedizo a no ser capaz de realizar un seguimiento del proceso PID (se puede realizar el seguimiento de los procesos de max sólo hasta el segundo tenedor - cuando se les da la expect daemon estrofa).

He resuelto de la siguiente manera:

  1. Primero he creado un RVM alias para mi entorno:

    rvm alias create my_app ruby-2.0.0-p247@my_app

  2. Luego he utilizado el siguiente advenedizo config para mi trabajo:

` # /etc/init/bluepill_my-app.conf

description "my_app Bluepill"

start on runlevel [2]
stop on runlevel [016]

setuid my-app
setgid my-app

expect daemon
respawn

env USER=my-app
env HOME=/var/www/my-app/
env RAILS_ENV=my-app
env BLUEPILL_BASE_DIR=/tmp/bluepill_my-app

chdir /var/www/my-app/current/

exec /var/www/my-app/.rvm/wrappers/my-app/bundle exec bluepill --no-privileged load  /var/www/my-app/current/config/deploy/monitoring/my-app.pill >> /tmp/upstart.log 2>&1

`

Bundler necesita ser instalado en el gemset para que el RVM alias está señalando.

Llamar a la bundler de contenedor de secuencia de comandos no causa ningún tipo de horquillas como el rvm-shell comando.

Una alternativa podría ser la de instalar el bluepill joya en el gemset, crear un contenedor de secuencia de comandos para él y usarlo directamente sin el bundle exec - al igual que el RVM manual sugiere - pero el uso de ella a través de bunlder permite bluepill .pill archivos de cualquier biblioteca ussed en mi aplicación (como setingslogic etc.).

Este tiene un poco fuera de tema, pero creo que es un buen ejemplo de cómo hacerlo mejor. Espero que esto ayude.

0voto

xentek Puntos 296

Usted puede ser que desee mirar a Foreman: http://ddollar.github.com/foreman/ que tiene la capacidad de exportar a upstart y se recomienda para la gestión de resque trabajadores en un número de puestos, como este: http://michaelvanrooijen.com/articles/2011/06/08-managing-and-monitoring-your-ruby-application-with-foreman-and-upstart/

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: