0

私は Chef の初心者であり、レシピを使用してデプロイするたびに、クラウド ノードで resque ワーカーを再起動したいと考えています。ワーカーを開始するために resque が提供する Rake タスクがあります

QUEUE='*' bundle exec rake environment resque:work >>/log/resque.log 2>&1 &

それを止めるには、resque プロセスを grep して手動で kill します。

Chefサービスで rake タスクを実行する方法の良い例を見つけることができませんでした。私が意図したことを実行するサンプル サービスを手伝ってくれる人はいますか?

4

1 に答える 1

1

ワーカーの再起動に使用されるexecuteリソースを作成します(必要に応じて調整します)。action :nothing

execute "restart_resque_workers" do
  command "pkill resque && QUEUE='*' bundle exec rake environment resque:work >>/log/resque.log 2>&1 &"
  cwd "/path/to/app"
  action :nothing
end

次に、デプロイ リソースに以下を追加します。

application "app" do
  ...
  notifies :run, "execute[restart_resque_workers]"
end

およびメカニズムは適切なサービスによって処理されるのが理想的ですstopが、いずれにしても全体的なパターンは同じです。startrestart

このnotifies属性は、applicationリソースが変更された場合にのみ有効になります (通常、これは新しいデプロイを意味します)。

通知の詳細については、Chef ドキュメント を参照してください。


貧乏人のサービスは次のようになります。

service 'resque_workers' do
  start = "QUEUE='*' bundle exec rake environment resque:work >>/log/resque.log 2>&1"
  stop = "pkill resque"
  start_command start
  stop_command stop
  restart_command "#{stop}; #{start}"
  supports [ :start, :stop, :restart ]
end

次にnotifies :restart, "service[resque_workers]"applicationリソースで使用します。

于 2014-02-25T15:39:03.050 に答える