使用nginx和supervisor - nginx进程多次启动导致绑定错误

Kar*_*ikJ 8 port nginx supervisord

我正在使用nginx和Supervisor.我的supervisord.conf文件内容如下:

[supervisord]
nodaemon=true
logfile=/var/log/supervisor/supervisord.log

[program:nginx]
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
redirect_stderr=true

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[unix_http_server]
file=/tmp/supervisor.sock ; path to your socket file

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
Run Code Online (Sandbox Code Playgroud)

在确保netstat -nltp表示所有端口都是免费的之后我启动了supervisord,但是请找到下面的nginx错误日志:

2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:81 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:18081 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:18082 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:18083 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:10080 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:8080 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:28080 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:18080 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:20081 failed (98: Address already in use)
2014/09/10 20:39:00 [emerg] 277#0: bind() to 0.0.0.0:81 failed (98: Address already in use)
Run Code Online (Sandbox Code Playgroud)

但是netstat -nltp命令给了我以下内容:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:28080           0.0.0.0:*               LISTEN      246/nginx: master p
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      246/nginx: master p
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      246/nginx: master p
tcp        0      0 0.0.0.0:20081           0.0.0.0:*               LISTEN      246/nginx: master p
tcp        0      0 0.0.0.0:18080           0.0.0.0:*               LISTEN      246/nginx: master p
tcp        0      0 0.0.0.0:10080           0.0.0.0:*               LISTEN      246/nginx: master p
tcp        0      0 0.0.0.0:18081           0.0.0.0:*               LISTEN      246/nginx: master p
tcp        0      0 0.0.0.0:18082           0.0.0.0:*               LISTEN      246/nginx: master p
tcp        0      0 0.0.0.0:18083           0.0.0.0:*               LISTEN      246/nginx: master p
Run Code Online (Sandbox Code Playgroud)

这意味着nginx已启动并正在运行.但是,是否主管试图启动多个nginx进程,或者它没有从nginx获取它已经启动的信号.任何人都可以对此有所了解吗?

mik*_*nto 4

您应该添加-g 'daemon off;'到 nginx 参数中。

Supervisor 希望服务在前台运行。默认情况下,nginx 会分叉(守护进程)到后台并退出。Supervisor退出时会认为nginx死掉了,并尝试重新启动。

在旧版本的 nginx 中daemon off,不鼓励这样做,但现在情况已不再如此。