2014-06-27 14 views
14

Używam sidekiq gem do uruchamiania wywołań API w tle. Pobiegłem sidekiq w procesie Daemon jak:Szyny: Jak ponownie uruchomić sidekiq?

bundle exec sidekiq -d 

Teraz zrobiłem pewne zmiany w mojej metody, więc chcę, aby ponownie uruchomić sidekiq. Próbowałem zabić sidekiq przy użyciu poniższego polecenia:

kill -9 process_id 

ale to nie działa. Chcę poznać polecenie ponownego uruchomienia procesu sidekiq. Jeśli masz jakiś pomysł, podziel się ze mną.

Próbowałem komendy poniżej również:

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

Jakiego błędu dostałeś? – ShadSterling

+0

Zobacz [tę odpowiedź] (http://stackoverflow.com/posts/18261016/revisions), aby uzyskać wskazówki dotyczące zamykania Sidekiq z wdziękiem, a także do uruchamiania go w sposób, który ułatwia jego zamykanie (spoiler: pidfile). – eebbesen

Odpowiedz

20

Więc po uznasz proces_id, skorzystaj z poniższego polecenia, które spowoduje zatrzymanie pracowników z coraz nowe miejsca pracy, a oni zakończyć istniejących miejsc pracy.

kill -USR1 [PROCESS_ID] 

Po tym można je zabić

kill -TERM [PROCESS_ID] 

Ponadto istnieje strona na sidekiq/wiki na temat tego, zwanych sygnałów.

[Edycja]

Here jest strona sygnałów.

[edytuj]

Sprawdź video

2

Aby utrzymać demon działa powinno się mieć jakąś dobrą obsługi błędów w klasach hardworker, ale można również skorzystać z poniższego polecenia, aby ponownie uruchomić biegaczy sidekiq gdyby nie występują w procesach systemowych.

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 

To w zasadzie wygląda na PID używając ps aux | grep sidekiq | grep -v grep | awk '{print $2}' a następnie zapisuje go w zmiennej x. Następnie, jeśli jest pusty, uruchomi demonizowany proces sidekiq.

Możesz włożyć tego faceta w crona lub coś w tym rodzaju. Ale jeśli twoje zawody ciągle zawodzą, na pewno będziesz chciał dowiedzieć się dlaczego.

EDYCJA: Dodano ścieżkę do wdrożenia z cron.

25

Start:

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

gdzie -d demonizować, -P plik pid, -L plik dziennika.

Przystanek:

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

gdzie 0 jest liczba sekund poczekać do wyjść Sidekiq.

+1

To powinno być oznaczone jako poprawna odpowiedź. – mainframer

-2

można po prostu napisać na konsoli (nie na produkcji):

  1. ps aux | grep sidekiq enter image description here
  2. to trzeba zabić proces, który:

    kill number_of_process lub kill -9 number_of_process jeśli to konieczne

    enter image description here

  3. teraz można sprawdzić z ps aux jeśli wciąż czegoś zabić

  4. początek sidekiq sidekiq
+0

Nigdy nie zabijaj sidekiq przy użyciu sygnału KILL (-9) przy produkcji. Możesz stracić pracę. Najlepszym rozwiązaniem jest wysłanie sygnału TSTP, oczekiwanie na zakończenie zadania i wysłanie sygnału TERM. Zobacz więcej informacji na: https://github.com/mperham/sidekiq/wiki/Signals – Kuba

0
  1. Wpisz w poniższe polecenie: ps -ef | grep sidekiq Daje to process_id i inne szczegóły dotyczące działania procesu sidekiq w tle.
  2. Kopiowanie PROCESS_ID i wykorzystanie polecenia: kill PROCESS_ID
  3. Zastosowanie następujące polecenie, aby ponownie uruchomić sidekiq w tle z opcją -d: bundle exec sidekiq -d -L log/sidekiq.log