Supervisord

用於啟動 rsyslog 和 haproxy 的 Supervisord 命令

  • June 14, 2021

我一直試圖讓這兩個在我的 docker 映像啟動時啟動,但它們似乎從未啟動。

[supervisord]
nodaemon=true

[program:rsyslog]
command=/bin/bash "service rsyslog start"

[program:haproxy]
command=/bin/bash "service haproxy start"

需要什麼命令才能先按 rsyslog 的順序啟動,然後是 haproxy?

[supervisord]
nodaemon=true

[program:rsyslog]
command=service rsyslog start

[program:haproxy]
command=service haproxy start

但是,現在我必須延遲啟動 haproxy,因為 haproxy 需要事先啟動 rsyslog。然而,這是另一個問題。

這是行不通的,因為service ... start命令將程序作為守護程序啟動並在後台發送。supervisord無法處理它,而是需要將它們作為子程序啟動並在前台執行它們。見這裡

打算在主管下執行的程序不應自行守護程序 。相反,它們應該在前台執行. 它們不應與它們啟動的終端分離。判斷程序是否將在前台執行的最簡單方法是執行從 shell 提示符呼叫程序的命令。如果它讓您重新控制終端,但繼續執行,它本身就是守護程序,這幾乎肯定是在主管下執行它的錯誤方式。您想要執行一個基本上需要您按 Ctrl-C 來重新控制終端的命令。如果它在執行後給你一個 shell 提示而不需要按 Ctrl-C,它在主管下沒有用。所有程序都有在前台執行的選項,但沒有“標準方式”來做到這一點;您需要閱讀每個程序的文件。

這是來自supervisord 文件的“真實世界”程序配置範例:

阿帕奇 2.2.6:

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

您的程序的啟動腳本可能是了解程序如何啟動的好地方,以進行正確的配置。

一些例子在這裡

引用自:https://serverfault.com/questions/738858