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