我想停止 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 版本,我们可以提供更详细的答案。