Supervisord 不会停止 nginx 进程

Supervisord 不会停止 nginx 进程

我经常使用 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。

答案1

您应该能够使用 nginx.conf 中的“daemon off”指令。

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

答案2

好的,问题是这样的:

我需要启动 nginx 并设置 LD_LIBRARY_PATH,以便 pcre、libxslt 和 libxml 位于路径中(这些都是自定义构建,带有构建以便于环境复制)。

因此我有一个 sh 脚本,它设置 LD_LIBRARY_PATH 然后启动 nginx,所以如果我想启动 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

相关内容