首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在runit/daemontools监督下运行坞进程是否合理?

在runit/daemontools监督下运行坞进程是否合理?
EN

Stack Overflow用户
提问于 2013-10-31 11:38:33
回答 2查看 1.9K关注 0票数 6

我一直在运行停靠程序(应用程序)

docker run …

但是在runit supervision (runit就像daemontools)下--所以runit确保进程保持不间断,传递信号等等。

这合理吗?Docker似乎想要运行它自己的妖魔化--但它没有runit那么彻底。此外,当runit重新启动应用程序时--每次都会创建一个新容器(很好),但它会留下旧容器的痕迹--这似乎意味着我做的方式不对。

码头不应该这样经营吗?

我是否应该从映像中设置一个容器,只设置一次,然后让runit一直运行/监督该容器?

EN

回答 2

Stack Overflow用户

发布于 2014-01-18 01:33:43

Docker确实做了一些守护容器的管理:如果系统关闭,那么当Docker守护进程启动时,它也会重新启动系统关闭时正在运行的任何容器。但是,如果容器自己退出,或者内核(或用户)在容器运行时杀死它,那么Docker守护进程就不会重新启动它。在需要重新启动的情况下,流程管理器是有意义的。

我不知道runit,所以我不能给出具体的配置指导。但是,您可能应该让流程管理器与docker守护进程通信,并检查给定的容器id是否正在运行(docker ps | grep container_id或等效的,或者直接使用Docker )。如果容器已停止,请使用Docker重新启动它(docker run container_id),而不是运行新容器。或者,如果每次都需要一个新容器,那么从docker run -rm开始,在它退出或停止时自动清理它。

如果您不希望您的流程管理器进行轮询,您可以运行一些监视docker events的程序。

您可以在启动容器作为启动守护进程的返回值时获得container_id,也可以要求Docker将其写入文件(docker run -cidfile myfilename,类似于PID文件)。

我希望这能帮助或帮助另一位runit大师提供更详细的建议。

票数 2
EN

Stack Overflow用户

发布于 2018-07-27 19:20:37

是的,我认为在runit下经营码头是有道理的。通常,当您启动一个进程时,有一种方法可以告诉它在默认情况下不要去守护它,因为从runit run脚本到进程的一般方法是通过run脚本的最后一行的exec。对于停靠者来说,这意味着确保不设置-d标志。

例如,对于docker,您可能希望运行脚本如下所示:

代码语言:javascript
复制
#!/bin/bash -e
exec 2>&1
exec chpst -u dockeruser docker run -a stdin -a stdout -i ...

使用execchpst应该可以解决大多数问题,当您关闭runit服务时,进程没有正确终止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19705513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档