我一直试图让我的 docker 镜像启动时启动这两个,但它们似乎从未启动过。
[supervisord]
nodaemon=true
[program:rsyslog]
command=/bin/bash "service rsyslog start"
[program:haproxy]
command=/bin/bash "service haproxy start"
需要什么命令才能按照先 rsyslog 然后 haproxy 的顺序启动它们?
答案1
这不会起作用,因为service ... start
命令会将程序作为守护进程启动并将其发送到后台。它supervisord
无法处理这个问题,而是需要将它们作为子进程启动并在后台运行。请参阅这里:
需要在主管监督下运行的项目不应守护进程 他们自己。相反,他们应该在前台运行。它们不应该与启动它们的终端分离。判断程序是否在前台运行的最简单方法是从 shell 提示符运行调用该程序的命令。如果它将终端的控制权交还给你,但继续运行,那么它就是在守护进程中运行,这几乎肯定是在主管模式下运行它的错误方法。你想要运行一个命令,它本质上要求你按 Ctrl-C 来重新获得终端的控制权。如果运行它之后你不需要按 Ctrl-C 就回到了 shell 提示符,那么它在主管模式下是没用的。所有程序都有在前台运行的选项,但没有“标准方法”来做到这一点;你需要阅读每个程序的文档。
以下是来自的一个“真实世界”程序配置示例Supervisord 文档:
Apache 2.2.6:
[program:apache2]
command=/path/to/httpd -c "ErrorLog /dev/stdout" -DFOREGROUND
redirect_stderr=true
程序的启动脚本是了解程序如何启动并进行正确配置的好地方。
一些例子是这里
答案2
[supervisord]
nodaemon=true
[program:rsyslog]
command=service rsyslog start
[program:haproxy]
command=service haproxy start
但是,现在我必须延迟启动 haproxy,因为 haproxy 需要先启动 rsyslog。然而,这又是一个问题。
答案3
你需要放类似的东西,只需调整参数
[program:rsyslog]
command=/sbin/rsyslogd -n -a /var/run/systemd/journal/syslog
numprocs=1
autostart=true
autorestart=true
问候,