2011-12-30 7 views
28

私たちはPHP gearman workerを使用して、さまざまなタスクを並行して実行します。すべてうまく動作し、私はそれらを欲しいときにそれらを回転させるために愚かな小さなシェルスクリプトがあります。プログラマ(それゆえに怠惰な人)であるので、私は起動スクリプトを使ってこれらを回転させることができるかどうかを見たいと思っていました。自動的に複数のupstartインスタンスを開始する

私はインスタンスのスタンザを使用する方法を考え出したので、私はインスタンス番号でそれらを起動することができます:

description "Async insert workers" 
author  "Mike Grunder" 

env SCRIPT_PATH="/path/to/my/script" 

instance $N 

script 
    php $SCRIPT_PATH/worker.php 
end script 

そして、これがそうのようにそれらを起動するために、素晴らしい作品:

sudo start async-worker N=1 
sudo start async-worker N=2 

私はこれらのワーカーを使いたいと思う方法は、いくつかの数を(コアあたりなど多分)スピンアップすることです、私は起動時にこれをしたいと思います。明らかにするために、コアの数を検出するために起動スクリプトは必要ありません。私はちょうど "8つのインスタンスを行う"と言うことがうれしいですが、それは私が複数の実行したい理由です。これを自動的に行うには、起動スクリプトで "start on"句を使用する方法がありますか?

たとえば、開始インスタンス1,2,3,4?その後、シャットダウン時に正常に終了するようにしますか?

私はこれをinit.dスクリプトに含めることができますが、アップスタートがこのようなことを処理できるかどうか、誰かがこの問題を理解しているかどうかは疑問でした。

乾杯!

答えて

40

必要なものは、起動時に実行され、それぞれの作業を開始するすべてのワーカージョブを繰り返し実行するブートストラップタスクです。

#/etc/init/async-workers-all.conf 

start on runlevel [2345] 

task 

env NUM_WORKERS=8 

script 
    for i in `seq 1 $NUM_WORKERS` 
    do 
    start async-worker N=$i 
    done 
end script 

キーはそれのためにすべてのイベントを放出する前に完了したタスクの実行を許可する成り上がりを告げるこのタスクを作ることです。 http://upstart.ubuntu.com/cookbook/#taskhttp://upstart.ubuntu.com/cookbook/#instance

+0

ありがとうございました!同様の方法で試してみましたが、 'task'ビットが欠けていたので、ループの最初の繰り返しがブロックされます。驚くばかり。 :) – mkgrunder

+11

あなたはまた、複数のインスタンスを開始するだけでなく、それらを停止することができますhttp://stackoverflow.com/questions/12084025/restarting-upstart-instance-prcessesをチェックアウトする必要があります。 – Evgeny

+0

私はドキュメントを読んだことがありますが、まだそれを得ることはできません。それがタスクでない限り、最初の反復でループがブロックされているのはなぜですか?/cc @mkgrunder – Mahn

関連する問題