我的软件在单个计算机上运行Phusion 基础图像基于docker镜像。它由几个由运行. 对于这些流程/服务之一(rqworker),我需要根据特定于部署的配置(即并行 rqworkers 的数量)启动多个实例。在我看来,runit 似乎不支持设置为每个服务启动的实例数量。
在 runit 本身中是否有任何方法可以解决这个问题,或者我最好运行类似的主管作为一项runit
服务并让它来照顾 rqworkers?
答案1
利用这个原则可以轻松地包装多进程服务:
- 最终命令不会产生错误,因此它可以
sleep infinity
代替真实的过程。 - 其他命令作为后台作业执行,使用
&
此代码片段展示了它的工作原理。将其放入/etc/service/your-service/run
并使其可运行,然后用 rqworker 调用替换第 5 行的 cmd。
#!/bin/bash
# have in env: WORKER_COUNT=7
for i in $(seq 1 $WORKER_COUNT)
do
sleep $((i + 100)) &
done
sleep infinity
ps 插件:
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