我一直试图让这两个开始,当我的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才能启动。 这是另一个问题。