创build一个不会自动启动的runit服务

我正在开发一个基于Phusion的baseimage构build的Docker容器,这个容器需要有许多服务只需要启动。 我希望这些服务保持为runit服务,我只是希望它们不会在启动时自动启动。

从他们的文档中可以看出,你可以通过在/etc/service创build一个文件夹来使用你的服务名称,例如: /etc/service/jboss 。 接下来,您必须在名为run服务目录中创build并chmod +x文件,该文件将执行服务的启动。

我该如何做到这一点,并确保该服务不会在启动时启动? 目标仍然是能够做到sv start jboss ,但没有启动启动。

将您的服务添加到/etc/sv/<SERVICE_NAME>/然后像现在一样添加run可执行文件。 当你准备好运行这个服务时,只需将它符号链接到/etc/service然后runit就会自动运行它。

这里有一个简短的(非优化的)Dockerfile,它显示了一个禁用的服务和一个启用的服务。 启用的服务将从Docker运行开始。 被禁用的服务在它被连接到/etc/service之前不会启动,此时runit将在五秒内启动它。

 FROM phusion/baseimage RUN mkdir /etc/sv/disabled_service ADD disabled_service.sh /etc/sv/disabled_service/run RUN chmod 700 /etc/sv/disabled_service/run RUN mkdir /etc/sv/enabled_service ADD enabled_service.sh /etc/sv/enabled_service/run RUN chmod 700 /etc/sv/enabled_service/run RUN ln -s /etc/sv/enabled_service /etc/service/enabled_service CMD ["/sbin/my_init"] 

使用phusion/baseimage:0.9.17 (不确定在哪个版本中引入),你可以在你的Dockerfile中烧烤RUN touch /etc/service/jboss/down 。 它可以防止runit在启动时启动,而且你仍然可以在稍后sv start jboss

我看着完全相同的问题(当在一个容器中运行Cassandra),我还没有find一个干净的答案。 下面是我提出的两种方法。

– 具有一个早期的运行级脚本,根据是否需要在启动时启动某个文件,将文件移入或移出run

– (错)使用service控制命令runit来运行实际启动您的服务,并使用虚拟run命令绕过自动启动。

这两种方法显然都不太理想,但他们已经为某些目的而工作。