Mac-Osx

Supervisord 不會停止 nginx 程序

  • December 31, 2010

我經常使用 Supervisor,在這個項目中我有一個由 Supervisord 管理的 nginx 程序。配置的相關部分是這樣的:

[supervisord]
logfile=/home/projects/eceee-web/prod/var/log/supervisord.log
logfile_maxbytes=5MB
logfile_backups=10
loglevel=info
pidfile=/home/projects/eceee-web/prod/var/supervisord.pid ;
childlogdir=/home/projects/eceee-web/prod/var/log
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)
directory=/home/projects/eceee-web/prod

[program:nginx]
command = /home/projects/eceee-web/prod/bin/nginx
redirect_stderr = true
autostart= true
autorestart = true
directory = /home/projects/eceee-web/prod
stdout_logfile = /home/projects/eceee-web/prod/var/log/nginx-stdout.log
stderr_logfile = /home/projects/eceee-web/prod/var/log/nginx-stderr.log

/home/projects/eceee-web/prod/bin/nginx命令將在前台啟動 Nginx,它不會自行解除監控。儘管如此,停止它還是會失敗:

supervisorctl stop nginx

不會給出任何答案,但過程將繼續。知道什麼嗎?

這是在 OS X Darwin 上,帶有 Supervisor 3.0a9 和 nginx 0.7.65。

好的,問題是這樣的:

我需要在設置 LD_LIBRARY_PATH 的情況下啟動 nginx,以便 pcre、libxslt 和 libxml 在路徑中(這是所有自定義建構,帶有用於輕鬆複製環境的建構)。

因此我有一個設置 LD_LIBRARY_PATH 然後啟動 nginx 的 sh 腳本,所以如果我想啟動 nginx,我不必顯式設置它。

當然,我讓 nginx 啟動該腳本。

但是,當它終止該父程序時,nginx 並沒有死!

似乎 nginx 將自己與啟動它的 shell 分離,即使不是在守護程序模式下執行。

解決方案:直接呼叫nginx二進製文件,環境設置正確:

[program:nginx]
command = /Volumes/Macintosh-HD2/ServiceData/Web/eceee.org/staging/parts/nginx/sbin/nginx
environment = LD_LIBRARY_PATH="/Volumes/Macintosh-HD2/ServiceData/Web/eceee.org/staging/parts/lxml/libxml2/lib:/Volumes/Macintosh-HD2/ServiceData/Web/eceee.org/staging/parts/lxml/libxslt/lib:/Volumes/Macintosh-HD2/ServiceData/Web/eceee.org/staging/parts/pcre/lib"
redirect_stderr = true
autostart= true
autorestart = true
directory = /Volumes/Macintosh-HD2/ServiceData/Web/eceee.org/staging
stdout_logfile = /Volumes/Macintosh-HD2/ServiceData/Web/eceee.org/staging/var/log/nginx-stdout.log
stderr_logfile = /Volumes/Macintosh-HD2/ServiceData/Web/eceee.org/staging/var/log/nginx-stderr.log

您應該能夠在 nginx.conf 中使用“daemon off”指令。

http://wiki.nginx.org/CoreModule#daemon

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