用supervisord运行(并监视)nginx

我将从我的使用案例开始,因为我很可能没有使用正确的工具来完成这项工作。 请让我知道,如果我这样做是错误的

用例:我有一个托pipe多个Web应用的CentOS服务器。 我希望能够相信我的Web服务器和应用程序服务器将运行。 我的堆栈看起来像

  • networking服务器:nginx
  • 应用程序服务器:uWSGI
  • web框架:flask / python

我想用supervisord来监视nginx和uWSGI。 在我的/etc/supervisor.conf中,我有

[program:nginxgo] command = /usr/sbin/nginx autostart=true autorestart=unexpected exitcodes=0 stdout_logfile=/home/webdev/nginxgo.log stderr_logfile=/home/webdev/nginxgoerr.log [program:uwsgi_emperor_go] command = uwsgi --emperor /etc/uwsgi/emperor.ini autostart=true autorestart=unexpected stopsignal=INT stdout_logfile=/home/webdev/emp.log stderr_logfile=/home/webdev/emperr.log directory=/home/webdev/ user=webdev 

我得到了uWSGI进程。 当我input[root@mymachine]# /usr/local/bin/supervisord -n -c /etc/supervisord.conf

输出是

 2014-11-26 14:07:56,917 CRIT Supervisor running as root (no user in config file) 2014-11-26 14:07:56,951 CRIT Server 'inet_http_server' running without any HTTP authentication checking 2014-11-26 14:07:56,952 INFO supervisord started with pid 31068 2014-11-26 14:07:57,957 INFO spawned: 'nginxgo' with pid 31071 2014-11-26 14:07:57,970 INFO spawned: 'uwsgi_emperor_go' with pid 31072 2014-11-26 14:07:59,095 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2014-11-26 14:07:59,095 INFO success: uwsgi_emperor_go entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2014-11-26 14:08:00,601 INFO exited: nginxgo (exit status 1; not expected) 2014-11-26 14:08:01,607 INFO spawned: 'nginxgo' with pid 31079 2014-11-26 14:08:02,684 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2014-11-26 14:08:04,189 INFO exited: nginxgo (exit status 1; not expected) 2014-11-26 14:08:05,194 INFO spawned: 'nginxgo' with pid 31080 2014-11-26 14:08:06,264 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2014-11-26 14:08:07,771 INFO exited: nginxgo (exit status 1; not expected) 2014-11-26 14:08:08,775 INFO spawned: 'nginxgo' with pid 31081 2014-11-26 14:08:09,808 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2014-11-26 14:08:11,314 INFO exited: nginxgo (exit status 1; not expected) 2014-11-26 14:08:12,319 INFO spawned: 'nginxgo' with pid 31082 2014-11-26 14:08:13,381 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2014-11-26 14:08:14,886 INFO exited: nginxgo (exit status 1; not expected) ^C2014-11-26 14:08:15,601 INFO spawned: 'nginxgo' with pid 31083 2014-11-26 14:08:15,603 WARN received SIGINT indicating exit request 2014-11-26 14:08:15,611 INFO waiting for nginxgo, uwsgi_emperor_go to die 2014-11-26 14:08:16,738 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2014-11-26 14:08:18,242 INFO exited: nginxgo (exit status 1; not expected) 2014-11-26 14:08:19,244 INFO waiting for uwsgi_emperor_go to die 2014-11-26 14:08:21,607 INFO stopped: uwsgi_emperor_go (exit status 0) 

看看它是怎么说的

 2014-11-26 14:07:59,095 INFO success: nginxgo entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2014-11-26 14:07:59,095 INFO success: uwsgi_emperor_go entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 

但是它只是开始循环nginxgo进程。 我用CTRL-C杀死了supervisord实例,并且在htop中看到nginx master processworker process都处于活动状态。

我只想在服务器启动/重新启动或两个程序失败的情况下启动nginx和我的uWSGI emperor

supervisord只能在前台处理进程。 nginx的默认值在后台作为守护进程运行。

为了确保你的nginx运行在supervisord上,你必须在你的nginx.conf中设置'daemon off'(另请参阅http://nginx.org/en/docs/ngx_core_module.html#daemon中的 nginx文件)。