Detener un rake task desde la aplicacion


#1

Hola expertos,

estoy haciendo una aplicación que inicia una tarea rake, y queria
preguntarles se puede hacer para detener esta tarea rake desde la
aplicacion,
pienso en hacer una llamada a ps aux | ruby, para conocer si se está
ejecutando ese determinado proceso y luego hacer un kill a ese proceso

¿hay alguna forma mejor de hacerlo?

Saludos

Atte.
Miguel Michelson Martinez


#2

El 12/11/2008, a las 17:37, Miguel M.
escribió:> estoy haciendo una aplicación que inicia una tarea rake, y queria

preguntarles se puede hacer para detener esta tarea rake desde la
aplicacion,

Si es una tarea rake que no termina, no es una tarea. Es un demonio.
Como tal no debe de hacerse como una tarea rake, sino más bien como un
script/runner (Aunque siempre hay excepciones).

El tipo de demonio, así imaginando, puede ser de tres tipos.

1.- Loop infinito
2.-Asíncrona (Un servidor que espera conexiones)
3.- Un proceso que se ejecuta cada x tiempo.

Para el primer y segundo caso, lo más cómodo es tirar de la gema
daemons, o del ya mítico start-stop-daemon. Para el tercero, lo más
cómodo es cron.

Esto respecto a como crear una tarea que no termina.

pienso en hacer una llamada a ps aux | ruby, para conocer si se
está ejecutando ese determinado proceso y luego hacer un kill a ese
proceso.

Supongamos que te refieres a ps aux | grep ruby es muy poco
elegante, además de que tu aplicación no podría estar en ruby. De ser
así, se mataría a si misma. Entonces necesitamos saber de alguna
manera cual es el proceso que queremos matar, reiniciar, o en general,
enviar una señal.

La solución a este problema esta en /var/pid, /tmp/pids /var/spool/
pids etc… En este sitio del sistema (depende de que sistema sea), se
guardan archivos de texto con el número del pid (Proccess ID).

La siguiente pregunta obvia, es como se genera ese archivo. Para lo
cual, se me ocurren otras 3 opciones.

1.- start-stop-daemon se le pasa un parámetro para que lo haga.
2.- La aplicacion cuando arranca, lo guarda a mano.
3.- Es un mongrel o otra aplicacion rails/ruby la que lo hace, o la
que incluso, lo guarda en memoria.

De todas formas, con los pocos datos que das… yo no se recomendarte
nada concreto.

Saludos


#3

Hola Guillermo ,

Gracias por la ayuda y disculpa no haber dado mas antecedentes al
respecto.

te explico un poco mas.

tengo dos procesos. [1]

1º El primero es para examinar sitios e ir guardando la información
metatags, links y frases , este es un proceso que puede durar mucho
tiempo.

2º El segundo es para ir Rankeando todas las frases de cada pagina según
las
relevancias de cada palabra de la frase en relación a todo el corpus de
documentos, eso se debería ejecutar una vez que termina el otro proceso.

ahora puedo iniciar el primer proceso desde la aplicación , pero no se
como
detenerlo en algun punto,
También tengo implementado el primer proceso como 'demonio en base al
deamon generator, ¿es posible pasar parametros al demonio? ej:
my_deamon_ctl
-e1000 start

ahora, no se cual es la mejor opcion , si el demonio o el rake para esto
¿que recomendais?

muchas gracias

[1] http://pastie.org/313362

2008/11/12 Guillermo Álvarez Fernández removed_email_address@domain.invalid


#4

Hola,

finalmente deje el indexador como demonio, mucho mejor asi

y el rankeador como rake task

saludos

Atte.
Miguel Michelson Martinez

www.artenlinea.com

2008/11/12 Miguel M. removed_email_address@domain.invalid