Можно ли использовать 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