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