nginx 未运行,但正在监听 80 端口

nginx 未运行,但正在监听 80 端口

我无法执行此操作,service nginx start因为:

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

但如果我这样做,service nginx status我会得到:

 * nginx is not running

这是在 ubuntu 14.04 上的 nginx 1.8,使用 stop 不起作用(因为它认为它没有正在运行)

我知道我可以终止在该端口上运行的进程,但我需要一种更优雅的方法来解决这个问题。

我已经确认 nginx 在监听 80 端口netstat -tulpn

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9787/nginx.conf 

跑步时sudo /usr/sbin/nginx -s reload

nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

我使用 AWS OpsWorks (Chef) 来管理基础设施。要安装 nginx,我使用https://github.com/miketheman/nginx/tree/2.7.xcookbook,并通过 repo 安装。运行 list = [nginx::repo, nginx::default]

第一次启动非常正常,但后续的设置调用导致设置失败。

由于。。。导致的结果ps aux | grep nginx

root      9791  0.0  0.0  31504  2184 ?        Ss   10:12   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www-data 14571  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process                   
www-data 14572  0.0  0.0  32036  2224 ?        S    10:13   0:00 nginx: worker process                   
www-data 14573  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process                   
www-data 14574  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process                   
www-data 14575  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process                   
www-data 14576  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process                   
www-data 14577  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process                   
www-data 14578  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process                   
www-data 14579  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process                   
www-data 14580  0.0  0.0  32036  1976 ?        S    10:13   0:00 nginx: worker process    

如果我运行echo '9791' | sudo tee /run/nginx.pidnginx,则会报告正在运行。以前 pid 文件是空的。

因此根本问题似乎是 pid 文件被截断了。

答案1

跑步 sudo fuser -k 80/tcp

这将终止监听端口 80 的 nginx 工作进程,从而允许您运行 nginx。

相关内容