Можно ли использовать runit для запуска нескольких экземпляров одного сервиса?

Мое программное обеспечение работает на одном образе докера на основе phusion-baseimage. Он состоит из пары процессов, которые управляются runit. Для одного из этих процессов / служб ( rqworker) мне нужно запустить несколько экземпляров на основе конфигурации, специфичной для развертывания (которая представляет собой просто число параллельных rqworkers). Мне кажется, что runit не поддерживает установку количества запущенных экземпляров для каждого сервиса.

Есть ли способы обойти это внутри самого рунита или мне лучше запустить что-то вроде http://supervisord.org/ как runit обслуживание и позволить ему позаботиться о рабочих?

1 ответ

Многопроцессный сервис можно легко обернуть, используя этот принцип:

  • Последняя команда не должна давать ошибок, поэтому она может быть sleep infinity вместо реального процесса.
  • другие команды выполняются как фоновые задания, используя &

Этот фрагмент показывает, как это работает. Поместите это в /etc/service/your-service/run и сделайте его работоспособным, а затем замените cmd в строке 5 вашими вызовами rqworker.

#!/bin/bash
# have in env: WORKER_COUNT=7
for i in $(seq 1 $WORKER_COUNT)
do
  sleep $((i + 100)) &
done
sleep infinity

ps afx:

   21 pts/0    S+     0:00 /usr/bin/runsvdir -P /etc/service
   26 ?        Ss     0:00  \_ runsv json-server
 2525 ?        S      0:00      \_ /bin/bash ./run
 2527 ?        S      0:00          \_ /bin/bash ./run
 2541 ?        S      0:00          |   \_ sleep 101
 2528 ?        S      0:00          \_ /bin/bash ./run
 2540 ?        S      0:00          |   \_ sleep 102
 2529 ?        S      0:00          \_ /bin/bash ./run
 2539 ?        S      0:00          |   \_ sleep 103
 2530 ?        S      0:00          \_ /bin/bash ./run
 2538 ?        S      0:00          |   \_ sleep 104
 2531 ?        S      0:00          \_ /bin/bash ./run
 2537 ?        S      0:00          |   \_ sleep 105
 2532 ?        S      0:00          \_ /bin/bash ./run
 2536 ?        S      0:00          |   \_ sleep 106
 2533 ?        S      0:00          \_ /bin/bash ./run
 2535 ?        S      0:00          |   \_ sleep 107
 2534 ?        S      0:00          \_ sleep infinity

Если этот взлом сна бесконечности смущает, просто замените его блестящей сменой информации sleep infinity в

bash -c 'exec -a softagram-is-cool-and-hip-until sleep infinity' &

..и мы сделали:

     2533 ?        S      0:00          \_ /bin/bash ./run
     2535 ?        S      0:00          |   \_ your-kick-ass-service-1
     2535 ?        S      0:00          |   \_ your-kick-ass-service-2
     2534 ?        S      0:00          \_ softagram-is-cool-and-hip-until infinity
Другие вопросы по тегам