2015-06-12 43 views
1

我目前正在嘗試使用ubuntu:14.04作爲基礎映像,使用nginx和gunicorn/django/celery運行裏面的docker容器。我正在使用主管開始所有的流程,並進行了測試以確保gunicorn在發生故障時重新啓動。但是,我無法弄清楚如何用nginx做到這一點。確保nginx主進程保持運行

我對Nginx的supervisord.conf如下:

[program:nginx] 
command=nginx 
autorestart=false 

我已經自動重新啓動設置爲false,因爲從我所知道的,Nginx的命令只啓動主進程和工作進程,然後退出狀態碼爲0.如果我將autorestart設置爲true,它只是不斷嘗試重新啓動該nginx命令,由於主/從進程已經在運行並綁定到端口,所以後續重試會失敗。

從表面上看,這似乎沒問題,因爲如果我嘗試殺死一個工作進程,那麼主服務器會啓動另一個工作人員來處理它。但是,我如何確保主進程保持運行?

+0

我不知道我理解的問題,但你不能使用monit的呢? – JustMichael

+0

你能分享你的Dockerfile嗎? – christian

回答

2

您需要將daemon off;附加到您的nginx.conf配置中,指示nginx在前臺運行。

然後修改你的上級節是:

[program:nginx] 
command=nginx 
autorestart=true 

它仍然會產卵主/工作進程/子過程,可以用這樣的方式在生產準備就好了。在這種情況下,主管會在後臺運行該流程並對其進行控制並進行監督。

看到這個FAQ entry

+1

謝謝詹姆斯,這聽起來像是會起作用!只是爲了確保我理解當我進行更改時應該看到的內容,如果我在docker上運行ps -ef,我應該看到nginx行,主進程行和工作進程行是否正確?即使有守護進程,我仍然因爲某種原因得不到這個結果;作爲我的配置中的第一條(非註釋)行。我仍然只有主人和工人。當我殺死主人時,主人不會重新啓動,所以只有工人繼續工作。我甚至嘗試向主管conf添加「killasgroup = true」選項。有什麼想法嗎? –

+0

這是一個非常好的問題;由於我對nginx'x內部流程管理不熟悉,因此我必須仔細研究它。 –

+0

對不起,澄清,用你推薦設置,supervisor.log所示: '2015年6月15日13:37:53177 INFO催生:具有pid 16' PS '的nginx' -ef表示: '根部16 1 0 13:37? 00:00:00 nginx:主進程nginx' 如果我'kill -9 16',主人死亡和工作人員保持運行。主管是否嘗試重新運行'nginx'根據您的設置,但不斷抱怨: '綁定()到0.0.0.0:80失敗(98:地址已在使用中)' 我認爲我應該強迫工人死亡主人,但「killasgroup =真」似乎並沒有完成那件事。有什麼建議麼?我錯過了什麼嗎? –