28

PHP のギアマン ワーカーを使用して、さまざまなタスクを並行して実行します。すべてがうまく機能し、必要なときに起動するためのばかげた小さなシェル スクリプトがあります。プログラマーである (したがって怠け者である) ので、新興スクリプトを使用してこれらを起動できるかどうかを確認したかったのです。

インスタンススタンザの使い方がわかったので、インスタンス番号で開始できます。

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

これらのワーカーを使用したい方法は、いくつかのワーカー (コアごとに 1 つなど) を起動することであり、起動時にこれを実行したいと考えています。明確にするために、コアの数を検出するために upstart スクリプトは必要ありません。「8 つのインスタンスを実行する」とだけ言ってよろしいのですが、それが複数の実行が必要な理由です。これを自動的に行うために、upstart スクリプトで「start on」句を使用する方法はありますか?

たとえば、インスタンス 1、2、3、4 を開始しますか? 次に、シャットダウン時に適切に終了しますか?

これをinit.dスクリプトにフックできると思いますが、upstartがこのようなことを処理できるかどうか、または誰かがこの問題を理解しているかどうか疑問に思っていました.

乾杯!

4

1 に答える 1

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

重要なのは、これをtaskにすることです。これにより、イベントを発行する前に、タスクを完了まで実行するよう upstart に指示します。http://upstart.ubuntu.com/cookbook/#taskおよびhttp://upstart.ubuntu.com/cookbook/#instanceを参照してください。

于 2012-01-08T22:57:07.633 に答える