Supervisord命令启动rsyslog和haproxy

我一直试图让这两个开始,当我的docker形象开始,但他们似乎从来没有开始。

[supervisord] nodaemon=true [program:rsyslog] command=/bin/bash "service rsyslog start" [program:haproxy] command=/bin/bash "service haproxy start" 

什么命令是需要启动两个rsyslog的顺序,然后haproxy?

这是不行的,因为service ... start命令启动程序作为守护进程并在后台发送它。 supervisord不能处理,而是需要将它们作为subprocess启动,并在forground中运行它们。 看到这里 :

在监督下运行的程序不应该为自己辩护 。 相反,他们应该在前台运行 。 他们不应该从他们开始的terminal脱离。 判断程序是否在前台运行的最简单方法是运行从shell提示符调用程序的命令。 如果它让你控制terminal回来,但是继续运行,它就是守护进程,而且几乎肯定是在主pipe下运行它的错误方法。 你想运行一个命令,基本上要求你按下Ctrl-C来控制terminal。 如果它在运行后不需要按Ctrl-C就可以返回一个shell提示符,它在supervisor下是没有用的。 所有的程序都有可以在前台运行的选项,但是没有“标准的方法”去做; 你需要阅读每个程序的文档。

这是来自supervisord文档的“真实世界”程序configuration示例:

Apache 2.2.6:

 [program:apache2] command=/path/to/httpd -c "ErrorLog /dev/stdout" -DFOREGROUND redirect_stderr=true 

您的程序的启动脚本可以是一个很好的地方,找出程序的启动,适当的configuration。

这里有一些例子

 [supervisord] nodaemon=true [program:rsyslog] command=service rsyslog start [program:haproxy] command=service haproxy start 

但是,现在我必须延迟启动haproxy,因为haproxy需要rsyslog才能启动。 这是另一个问题。