2014-06-27 13 views
14

Ich benutze sidekiq gem, um API-Aufrufe im Hintergrund auszuführen. Ich lief sidekiq in Daemon Prozess wie:Schienen: Wie sidekiq neu starten?

bundle exec sidekiq -d 

Jetzt habe ich einige Veränderungen in meinem Verfahren hergestellt, so möchte ich sidekiq neu zu starten. Ich habe versucht, die Sidekiq mit dem folgenden Befehl zu töten:

aber es funktioniert nicht. Ich möchte den Befehl zum Neustart von sidekiq-Prozess kennen. Wenn Sie eine Idee haben, bitte teilen Sie mit mir.

habe ich versucht, die unter Befehl auch:

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

Welchen Fehler bekommen Sie? – ShadSterling

+0

Siehe [diese Antwort] (http://stackoverflow.com/posts/18261016/revisions) für Tipps zum eleganten Herunterfahren von Sidekiq, und auch um es so zu starten, dass es einfacher heruntergefahren werden kann (Spoiler: Pidfile). – eebbesen

Antwort

20

So, nachdem Sie finden Sie proces_id, verwenden Sie den unten Befehl, dass die Arbeiter davon ab, neue Arbeitsplätze zu stoppen, und sie werden bestehende Arbeitsplätze beenden.

kill -USR1 [PROCESS_ID] 

Danach können Sie sie

kill -TERM [PROCESS_ID] 

auch töten gibt es eine Seite auf sidekiq/wiki darüber, genannt Signale.

[Bearbeiten]

Here ist das Signal Seite.

[Bearbeiten]

prüfen video

2

Um den Daemon Laufen halten Sie auf jeden Fall in den Hardworker Klassen einige gute Fehlerbehandlung haben sollte, aber Sie können auch den folgenden Befehl verwenden, um die sidekiq Läufer neu zu starten, wenn sie werden in den Systemprozessen nicht gefunden.

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 

Das sieht im Grunde für die PID mit ps aux | grep sidekiq | grep -v grep | awk '{print $2}' und speichert sie dann in der Variablen x. Wenn es leer ist, wird ein daemonisierter sidekiq-Prozess ausgeführt.

Sie können diesen Kerl in einen Cron Job oder so etwas stecken. Aber wenn Ihre Jobs kontinuierlich versagen, werden Sie definitiv herausfinden wollen warum.

BEARBEITEN: Pfad zur Bereitstellung aus Cron hinzugefügt.

25

Start:

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

wo -d demonize, -P pid-Datei, -L Protokolldatei.

Haltestelle:

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

wo 0 Anzahl von Sekunden, bis Sidekiq Ausfahrten zu warten.

+1

Dies sollte als die richtige Antwort markiert werden. – mainframer

-2

Sie können nur auf der Konsole schreiben (NOT ON PRODUCTION):

  1. ps aux | grep sidekiq enter image description here
  2. dann müssen Sie Prozess, dass töten:

    kill number_of_process oder kill -9 number_of_process, wenn es notwendig ist

    enter image description here

  3. jetzt können Sie mit ps aux ob es noch etw ist

  4. Start sidekiq sidekiq
+0

Töte sidekiq niemals mit dem KILL (-9) -Signal bei der Produktion. Sie könnten Ihre Jobs verlieren. Der beste Ansatz besteht darin, das TSTP-Signal zu senden, zu warten, bis alle Aufträge beendet sind, und das TERM-Signal zu senden. Weitere Informationen finden Sie unter: https://github.com/mperham/sidekiq/wiki/Signals – Kuba

0
  1. Geben Sie folgenden Befehl zu töten: ps -ef | grep sidekiq Dies gibt Prozess-ID und andere Details zum Ausführen von Sidekiq-Prozess im Hintergrund.
  2. Copy process_id und Nutzung folgenden Befehl ein: kill Prozess
  3. Use-Befehl folgenden sidekiq wieder mit Option -d im Hintergrund zu starten: Bündel exec sidekiq -d -L log/sidekiq.log