Автоматический запуск нескольких экземпляров upstart - PullRequest
28 голосов
/ 30 декабря 2011

Мы используем работников Gearman для выполнения параллельных задач. Все работает просто отлично, и у меня есть небольшой глупый скрипт для раскрутки, когда я хочу их Будучи программистом (и, следовательно, ленивым), я хотел посмотреть, смогу ли я раскрутить их с помощью сценария выскочки.

Я выяснил, как использовать раздел экземпляров, чтобы я мог начать их с номера экземпляра:

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

То, как я хочу использовать этих рабочих, - это раскрутить некоторое их количество (возможно, по одному на ядро ​​и т. Д.), И я хотел бы сделать это при запуске. Чтобы было ясно, мне не нужен скрипт upstart для определения количества ядер. Я счастлив просто сказать «сделать 8 экземпляров», но именно поэтому я хочу многократный запуск. Есть ли способ для меня использовать предложение «start on» в сценарии upstart, чтобы сделать это автоматически?

Например, запустить экземпляр 1, 2, 3, 4? Затем они правильно завершат работу?

Полагаю, я мог бы подключить это к сценарию init.d, но мне было интересно, может ли выскочка справиться с чем-то подобным, или кто-нибудь уже понял эту проблему.

Ура, ребята!

1 Ответ

40 голосов
/ 09 января 2012

Вам нужна задача начальной загрузки, которая запускается при запуске и перебирает все ваши рабочие задания, начиная каждое из них.

#/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

Ключ в том, чтобы сделать эту задачу ,который сообщает upstart, что задача должна быть выполнена до того, как она отправит какие-либо события.См http://upstart.ubuntu.com/cookbook/#task и http://upstart.ubuntu.com/cookbook/#instance

...