30

この回答で説明されているように、ワーカーの複数のインスタンスを実行しています:複数の upstart インスタンスを自動的に開始する

質問: 一度にすべてのインスタンスを再起動できますか?

ワーカーを開始するには、次のことができます。

initctl start my-worker

次に、次のことができます。

initctl status worker N=1 worker (1) 開始/実行中、プロセス 551

initctl status worker N=2 worker (2) 開始/実行中、プロセス 552

このようなことをする方法はありますか:

initctl restart my-worker

実行中のインスタンスの数を知らなくても、すべてのインスタンスを再起動できるようにしたいと考えています。

これが私のmy-workers.confです

start on stopped cloud-init
stop on shutdown

env NUM_WORKERS=4

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

そしてworker.conf

stop on shutdown

chdir /path/to/current

respawn

instance $N

script
  exec su -c "/home/worker/.rvm/bin/rvm-shell -c 'bundle exec rake work 2>&1 >> /var/log/worker-$N.log'" worker
end script
4

4 に答える 4

36

このworker.conf行を変更するだけです:

stop on shutdown

に:

stop on stopping my-workers

の代わりにmy-workers.conf使用するように変更します。pre-startscript

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

my-workers状態を保持します。作業は で行われるためpre-startmy-workersメイン プロセスは存在せず、終了しません。 stop on stopping my-workersが停止するたびにワーカーを停止my-workersさせます。もちろん、再起動すると、ワーカーが再び起動します。

(参考までに、定義されたすべてのイベントに対してシステムイベントではないため、stop on shutdown何もしません)したがって、 my-workers も次のように変更する必要がありますshutdownman upstart-eventsstop on runlevel [06]

于 2012-09-07T17:33:18.547 に答える
7

上記の例と SpamapS の回答で試してみたところ、次のように表示されました。

init: my-workers pre-start process (22955) terminated with status 127

問題が見つかりまし/var/log/upstart/my-workers.logた:

/proc/self/fd/9: 6: /proc/self/fd/9: end: not found

endfor ループの は間違っmy-workers.confた構文のようです。交換しました

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

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

そしてそれはうまくいきました!

于 2012-11-21T14:31:05.600 に答える
1

worker.conf にもう 1 つのイベントを追加することを検討してください。

stop on shutdown or workers-stop

次に、コマンドラインから呼び出すことができます

sudo initctl emit workers-stop

同様のイベントを追加してワーカーを開始できます。すべてのワーカーの再起動を実現するには、workers-stop イベントを発行してから worker-start イベントを発行するタスクを作成します。

于 2012-12-26T22:30:30.537 に答える