runit 可以用来启动单个服务的多个实例吗?

runit 可以用来启动单个服务的多个实例吗?

我的软件在单个计算机上运行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

相关内容