2014-06-27 16 views
14

Sto usando sidekiq gem per eseguire chiamate API in background. Mi sono imbattuto in sidekiq processo demone come:Rails: come riavviare sidekiq?

bundle exec sidekiq -d 

Ora ho fatto alcuni cambiamenti nel mio metodo, quindi voglio riavviare sidekiq. Ho cercato di uccidere il sidekiq utilizzando il seguente comando:

kill -9 process_id 

ma non sta funzionando. Voglio sapere il comando per riavviare il processo sidekiq. Se hai qualche idea per favore condividi con me.

Ho provato il seguente comando anche:

sidekiqctl stop /path/to/pid file/pids/sidekiq.pid 
+0

Che errore ottieni? – ShadSterling

+0

Vedere [questa risposta] (http://stackoverflow.com/posts/18261016/revisions) per suggerimenti su come spegnere Sidekiq con garbo, e anche per avviarlo in un modo che lo renda più semplice (spoiler: pidfile). – eebbesen

risposta

20

Così dopo aver trovato si proces_id, utilizza il comando di seguito, che si fermerà ai lavoratori di ottenere nuovi posti di lavoro, e saranno finire posti di lavoro esistenti.

kill -USR1 [PROCESS_ID] 

Dopo di che è possibile ucciderli

kill -TERM [PROCESS_ID] 

Inoltre v'è una pagina sul sidekiq/wiki su questo, chiamati segnali.

[modifica]

Here è la pagina di segnale.

[modifica]

check video

2

Per mantenere il demone in esecuzione si dovrebbe assolutamente avere qualche buona gestione nelle classi hardworker errore, ma è anche possibile utilizzare il seguente comando per riavviare i corridori sidekiq se non si trovano nei processi di sistema.

x=`ps aux | grep sidekiq | grep -v grep | awk '{print $2}'`; [ "$x" == "" ] && cd /path/to/deploy && bundle exec sidekiq -d -L /path/to/deploy/log/sidekiq.log -C /path/to/deploy/config/sidekiq.yml -e production 

guarda questo fondamentalmente per il PID utilizzando ps aux | grep sidekiq | grep -v grep | awk '{print $2}' e poi lo memorizza nella variabile x. Quindi, se è vuoto, eseguirà un processo sidekiq demonizzato.

È possibile inserire questo ragazzo in un cron job o qualcosa del genere. Ma se i tuoi lavori stanno fallendo continuamente, vorrai sicuramente capire perché.

MODIFICA: Aggiunto percorso per la distribuzione da cron.

25

Inizio:

$ bundle exec sidekiq -d -P tmp/sidekiq.pid -L log/sidekiq.log 

dove -d demonizzare, -P file di pid, -L file di log.

arresto:

$ bundle exec sidekiqctl stop tmp/sidekiq.pid 0 
Sidekiq shut down gracefully. 

dove 0 è il numero di secondi di attesa fino a quando uscite Sidekiq.

+1

Questo dovrebbe essere contrassegnato come la risposta corretta. – mainframer

-2

Si può solo scrivere sulla console (non su PRODUZIONE):

  1. ps aux | grep sidekiq enter image description here
  2. allora è necessario processo di che uccidono:

    kill number_of_process o kill -9 number_of_process se è necessario

    enter image description here

  3. ora è possibile controllare con ps aux se c'è ancora qlc di uccidere

  4. inizio sidekiq sidekiq
+0

Non uccide mai sidekiq utilizzando il segnale KILL (-9) in produzione. Potresti perdere il lavoro. L'approccio migliore è quello di inviare il segnale TSTP, attendere fino alla fine di tutti i lavori e il segnale TERM di invio. Vedi maggiori dettagli su: https://github.com/mperham/sidekiq/wiki/Signals – Kuba

0
  1. Digitare seguente comando: ps -ef | grep sidekiq Questo fornisce process_id e altri dettagli sul processo sidekiq in esecuzione in background.
  2. Copia process_id e l'uso seguente comando: uccidere process_id
  3. Usa seguente comando per avviare sidekiq di nuovo in background con l'opzione -d: fascio exec sidekiq -d -L log/sidekiq.log