2014-08-28 111 views
0

我的應用程序使用Sidekiq處理運行後臺任務的長時間(幾分鐘)。部署通過Capistrano 2完成,所有進程都由Monit監控。使用Capistrano,Sidekiq和Monit設置部署

我已經使用capistrano-sidekiq在部署期間管理sidekiq進程,但它並沒有完美運行。在部署過程中有時會開始一個新的sidekiq進程,但是舊的進程並沒有被終止。我相信會發生這種情況,因爲capistrano-sidekiq在部署期間沒有通過Monit進行操作。

第二個問題是,因爲我的後臺任務可能需要幾分鐘才能完成我的部署,所以應該允許兩個sidekiq進程共存。應該允許舊的sidekiq進程完成正在處理的任務,並且新的sidekiq進程應該開始處理新任務。

我一直在思考這樣的事情在我的部署腳本

當部署開始:

  • 我告訴monit的要取消監視的sidekiq過程
  • 我停止當前sidekiq過程,並給它10分鐘完成任務

代碼更新後:

  • 我開始一個新的sidekiq進程,並告訴Monit開始監視它。

我可能需要將sidekiq進程的PID文件移動到發佈目錄,如果不刪除pid文件,直至停止sidekiq進程最終被殺害。

聽起來如何?發現任何警告?

編輯:

發現一個關於這個問題的好主意。

http://librelist.com/browser//sidekiq/2014/6/5/rollback-signal-after-usr1/#f6898deccb46801950f40ad22e75471d

回答

0

似乎是合理的我。唯一可能的問題是失去舊的Sidekiq的PID,但你應該能夠使用ps和grep來「停止」來找到舊的Sidekiq。

+0

我試圖在之前停止sidekiq:update_code用命令'if [-d/home/staging/current] && [-f /home/staging/shared/pids/sidekiq.pid] && kill -0 cat /home/staging/shared/pids/sidekiq.pid>/dev/null 2>&1;然後cd/home/staging/current && bundle exec sidekiqctl stop /home/staging/shared/pids/sidekiq.pid 120;其他回聲'Sidekiq沒有運行';但它並沒有等待120秒。相反,它在8秒後殺死了正在運行的sidekiq線程。 – Mika 2014-09-20 21:27:40

+0

這就是記錄內容 2014-09-20T21:00:38Z 25932 TID-ae9x4 INFO:關機 2014-09-20T21:00:39Z 25932 TID-13ikrg INFO:關閉24位安靜的工作人員 2014-09 -20T21:00:39Z 25932 TID-13ikrg信息:暫停最多8秒,以讓工作人員完成... 2014-09-20T21:00:47Z 25932 TID-13ikrg警告:終止1繁忙工作線程 – Mika 2014-09-20 21:30:17

+0

您必須使用'sidekiq -t 120'來設置Sidekiq的內部關機超時。 sidekiqctl的超時時間是在殺死sidekiq之前等待的時間。 – 2014-09-21 19:01:47