2011-10-13 11 views
6

Come posso interrompere delayed_job se lo sto eseguendo con l'opzione -m "monitor"? I processi continuano a essere riavviati!Come posso smettere di delayed_job se lo sto eseguendo con l'opzione -m "monitor"?

Il comando comincio delayed_job con è:

script/delayed_job -n 4 -m start 

Il -m gestisce un monitorare i processi che genera un nuovo processo delayed_job se uno muore.

Il comando che sto usando per fermare è:

script/delayed_job stop 

Ma questo non ferma i processi di monitoraggio, che a sua volta si avviano tutti i processi di nuovo. Vorrei solo che se ne andassero. Posso ucciderli, cosa che ho, ma speravo che ci fosse qualche opzione da linea di comando per chiudere tutto.

risposta

8

Nel mio Capistrano distribuire sceneggiatura ho questo:

desc "Start workers" 
task :start_workers do 
    run "cd #{release_path} && RAILS_ENV=production script/delayed_job -m -n 2 start" 
end 

desc "Stop workers" 
task :stop_workers do 
    run "ps xu | grep delayed_job | grep monitor | grep -v grep | awk '{print $2}' | xargs -r kill" 
    run "cd #{current_path} && RAILS_ENV=production script/delayed_job stop" 
end 

Per evitare eventuali errori che potrebbero fermare il vostro script di distribuzione:

  • "PS Xu" Mostra solo i processi di proprietà dell'utente corrente
  • "xargs -r uccidere "invoca il comando kill solo quando c'è qualcosa da uccidere

Ho solo ucciso il monitor delayed_job e interrotto il deamon delayed_job nel modo normale.

+0

Io uccido i processi di lavoro in ritardo nel modo normale, quindi forza a uccidere eventuali ritardatari solo per essere sicuri. In capistrano 3, sto usando 'execute' invece di' run' – Dex

1

La risposta diretta è che è necessario prima interrompere il processo di monitoraggio. Ad ogni modo AFAIK non c'è un modo semplice per farlo, non penso che i PID del monitor siano memorizzati ovunque e lo script di avvio e arresto di DJ di certo non fa nulla di intelligente lì, come hai notato.

Trovo strano che sia stata inclusa la funzionalità del monitor: immagino che Daemons sia così che chiunque stia scrivendo il copione del DJ abbia pensato di passare semplicemente quell'opzione. Ma non è davvero utilizzabile così com'è.

ho scritto una e-mail alla lista su questo un po 'indietro, non ha ottenuto una risposta: https://groups.google.com/d/msg/delayed_job/HerSuU97BOc/n4Ps430AI1UJ

Si può vedere di più su monitoraggio con Daemons qui: http://daemons.rubyforge.org/classes/Daemons.html#M000004

Se si arriva con un migliore risposta/soluzione, aggiungila alla wiki qui: https://github.com/collectiveidea/delayed_job/wiki/monitor-process

+2

Sembra che le cose siano cambiate nei tre anni da quando è stata data questa risposta. Usando delayed_job 4.0.2, quando -m viene passato a 'delayed_job -m start', sia delayed_job.pid che delayed_job_monitor.pid vengono scritti in tmp/pids, e 'delayed_job stop' uccide entrambi i processi. – KenB

3

Ho avuto lo stesso problema. Ecco come ho risolto:

# ps -ef | grep delay 
root  8605  1 0 Jan03 ?  00:00:00 delayed_job_monitor        
root  15704  1 0 14:29 ?  00:00:00 dashboard/delayed_job        
root  15817 12026 0 14:31 pts/0 00:00:00 grep --color=auto delay 

Qui sotto potete vedere il processo delayed_jobe il monitor. Successivamente, eliminerei manualmente questi processi e quindi eliminerei i PID. Dalla directory dell'applicazione (/ usr/share/fantoccio-cruscotto nel mio caso):

# ps -ef | grep delay | grep -v grep | awk '{print $2}' | xargs kill && rm tmp/pids/*

Problemi correlati