Я часто использую Supervisor, и в этом проекте у меня есть процесс nginx, управляемый Supervisord. Соответствующие части конфигурации следующие:
[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.
Хорошо, проблема была в следующем:
Мне нужно запустить nginx с установленным LD_LIBRARY_PATH, чтобы pcre, libxslt и libxml были в пути (это все пользовательские сборки с построением для простой репликации среды).
Поэтому у меня есть сценарий sh, который устанавливает LD_LIBRARY_PATH, а затем запускает nginx, поэтому мне не нужно устанавливать его явно, если я хочу запустить nginx.
И, конечно же, я позволил nginx просто запустить этот скрипт.
Но затем, когда он завершает родительский процесс, nginx не умирает!
Кажется, что nginx отделяется от запущенной оболочки, даже если он не работает в режиме демона.
Решение: вызовите двоичный файл 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
У вас должна быть возможность использовать директиву «daemon off» в nginx.conf.