2014-06-27 83 views
14

我使用sidekiq gem在後臺運行API調用。我在Daemon進程中運行sidekiq如:Rails:如何重新啓動sidekiq?

bundle exec sidekiq -d 

現在我對我的方法做了一些更改,所以我想重新啓動sidekiq。我試圖通過使用以下命令殺死sidekiq:

kill -9 process_id 

但它不工作。我想知道重啓sidekiq進程的命令。如果您有任何想法,請與我分享。

我想下面的命令也:

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

你會得到什麼錯誤? – ShadSterling

+0

查看[這個答案](http://stackoverflow.com/posts/18261016/revisions)關於優雅地關閉Sidekiq的提示,以及使它更容易關閉的方式啓動它(spoiler:pidfile)。 – eebbesen

回答

20

你會發現等你以後proces_id,使用下面的命令,將從獲得新的就業機會阻止工人,他們將完成現有的工作。

kill -USR1 [PROCESS_ID] 

之後,你可以殺了他們

kill -TERM [PROCESS_ID] 

也有是在sidekiq /維基這個,叫做信號的頁面。

[編輯]

Here是信號頁面。

[編輯]

檢查video

2

爲了保證後臺運行,你絕對應該有一些好的錯誤在工作刻苦類處理,但你也可以使用下面的命令,如果重新啓動sidekiq選手,他們在系統進程中找不到。

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 

使用ps aux | grep sidekiq | grep -v grep | awk '{print $2}',然後將其存儲在變量x這基本上看起來爲PID。然後,如果它是空的,它將運行一個守護進程的sidekiq進程。

你可以堅持這個人進入一個cron工作或什麼的。但是,如果你的工作不斷失敗,你一定會想知道爲什麼。

編輯:添加從cron部署的路徑。

25

開始:

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

其中-d妖魔化,-P PID文件,-L日誌文件。

停止:

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

其中0是的秒數要等到Sidekiq退出。

+1

這應該被標記爲正確的答案。 – mainframer

-2

你可以只寫控制檯(不要在生產)上:

  1. ps aux | grep sidekiq enter image description here
  2. 那麼你需要殺死該進程:

    kill number_of_processkill -9 number_of_process,如果有必要

    enter image description here

  3. 現在你可以用ps aux檢查是否還有......在下面的命令來殺死

  4. 開始sidekiq sidekiq
+0

千萬不要在生產中使用KILL(-9)信號殺死sidekiq。你可能會失去你的工作。最好的方法是發送TSTP信號,等待所有作業完成併發送TERM信號。有關詳情,請參閱:https://github.com/mperham/sidekiq/wiki/Signals – Kuba

0
  1. 類型: PS -ef | grep sidekiq 這給出了process_id以及在後臺運行sidekiq進程的其他細節。
  2. 複製PROCESS_ID和使用下面的命令: 殺PROCESS_ID
  3. 使用下面的命令在後臺與-d選項重新開始sidekiq: 束EXEC sidekiq -d -L登錄/ sidekiq.log