问题

问题

我想停止 Nginx 但是它像这样失败了。

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

并且nginx.conf定义 nginx.pid 的地方有一行。

# /etc/nginx/nginx.conf
pid        /var/run/nginx.pid;

nginx.pid但目录中没有/var/run/

locate nginx.pid显示此输出。

/var/run/nginx.pid 
/var/run/nginx.pid.oldbin

updatedb搜索后没有匹配项。我在 中使用 nginx/1.4.4 CentOS release 6.5 (Final)

我应该怎么做才能停止 nginx 守护进程?

编辑 2014/01/07

这是的输出ps -ef | grep nginx,看来 nginx 守护进程仍在运行。

ironsand 17065 16933  0 15:55 pts/0    00:00:00 grep --color nginx
root     19506     1  0  2013 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
ironsand 19507 19506  0  2013 ?        00:00:25 nginx: worker process  

sudo service nginx restart给出此错误。我认为nginx启动失败是因为旧的仍然有效。并且/var/log/nginx/error.log-2014017还包含此错误。

Stopping nginx:                                            [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
                                                           [FAILED]

答案1

我建议先终止 nginx 的主进程,然后停止它。nginx 无法正常关闭可能是因为无法使用 init 脚本停止它。

ps -ef |grep nginx

这将向您显示 nginx 主进程的 PID。如您上面提到的:

root 19506 1 0 2013 ? 00:00:00 nginx: 主进程 /usr/sbin/nginx -c /etc/nginx/nginx.conf

使用杀死它

杀死-9 19506

再次检查是否有任何 nginx 进程正在运行或端口 80 是否被占用。如果看到任何进程绑定到端口 80,请识别 PID 并检查是否可以将其终止。

ps -ef |grep nginx

netstat -tulpn |grep 80

确保文件系统正常,你可以读取/写入 /var 文件系统。然后启动 nginx

服务 nginx 启动

答案2

问题

对我来说,这两个文件中的 pid 文件名是不同的:

  • /usr/lib/systemd/system/nginx.service
    • pid /var/run/nginx.pid;
  • /etc/nginx/nginx.conf
    • PIDFile=/run/nginx.pid

这两者需要匹配。

使固定:

所以我在 /usr/lib/systemd/system/nginx.service 中对其进行了调整,然后执行以下操作:

systemctl daemon-reload
systemctl start nginx

然后一切就正确了。

答案3

我遇到了这个问题,并且运行时ps -ef | grep nginx会向我显示将继续旋转的工人,尽管按照接受的答案所建议的那样终止了主进程:

[~]# ps -ef | grep nginx
nginx    10730     1  0 Sep14 ?        00:00:16 nginx: cache manager process            
nginx    18469     1  0 Oct09 ?        00:11:02 nginx: worker process                   
nginx    25779     1  0 Oct13 ?        00:01:31 nginx: worker process                   
nginx    26458     1  0 15:45 ?        00:00:00 nginx: worker process    

所以我的解决方案修复方法很简单:pkill nginx && service nginx restart

答案4

这似乎表明,如果 nginx 之前启动过,它会立即崩溃。你检查过内容以/var/log/nginx*查看进程正在做什么吗?

编辑:此外,如果您告诉我们您的操作系统和 nginx 版本,我们可以提供更详细的答案。

相关内容