web-dev-qa-db-ja.com

複数のupstartインスタンスを自動的に開始する

PHPギアマンワーカーを使用して、さまざまなタスクを並行して実行します。すべてが正常に機能し、必要なときにそれらを起動するための愚かな小さなシェルスクリプトがあります。プログラマーである(したがって怠惰な) 、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

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

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

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

乾杯!

28
mkgrunder

必要なのはbootstrapタスクで、起動時に実行され、すべてのワーカージョブを繰り返し、各ジョブを開始します。

#/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 を参照してください。

40
cwick