Supervisord
用於啟動 rsyslog 和 haproxy 的 Supervisord 命令
我一直試圖讓這兩個在我的 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
您的程序的啟動腳本可能是了解程序如何啟動的好地方,以進行正確的配置。
一些例子在這裡