6
我要開始4名resque工人,所以我用下面的命令多resque工人模式下創建額外的過程
bundle exec rake environment resque:workers RAILS_ENV=production COUNT=4 QUEUE=* VERBOSE=1 PIDFILE=tmp/pids/resque_worker.pid >> log/resque_worker_QUEUE.log
但要Web界面,它實際上開始8名工人。有兩個父進程和四個子進程。以下是處理過程的樹視圖:
ruby /code_base/bundle/ruby/1.9.1/bin/rake environment resque:workers RAILS_ENV=production COUNT=4 QUEUE=* VERBOSE=1 PIDFILE=tmp/pids/resque_worker.pid \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * \_ [ruby] ruby /code_base/bundle/ruby/1.9.1/bin/rake environment resque:workers RAILS_ENV=production COUNT=4 QUEUE=* VERBOSE=1 PIDFILE=tmp/pids/resque_worker.pid \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * | \_ [ruby] \_ resque-1.15.0: Waiting for * \_ [ruby]
無法弄清楚是什麼導致額外的進程啓動?
我已經通過了該文檔和腳本文件,但我們正在使用monit。根據該腳本,似乎每個resque工人都在WORKER_TIMEOUT時間後死亡。現在,即使我進行了全新的部署,工作人員仍可能會使用舊的代碼。因此,在最壞的情況下,需要WORKER_TIMEOUT時間來加載新的代碼,這可能有時會成爲問題。對此有何想法? – bikashp
只要您使用新部署的代碼啓動新工作人員,在殺死工作人員之前讓現有作業完成運行就沒有任何問題。 關鍵是向工作人員發送一個軟退出信號,以便在當前正在運行的作業完成時退出。所以是的,你可以讓一個工作人員運行舊代碼,但它的工作是在部署新代碼之前開始的。 – Winfield
我用這種方法看到的另一個問題是當上帝失敗時。由於工人在WORKER_TIMEOUT之後死亡,因此不會有工人處理工作。 – bikashp