我已经安装了 nginx 1.0.11 的 Ubuntu 11.04 i386 服务器。另外,我正在使用这个 init.d script,这是我在几个不同地方找到的唯一一个。它很好地启动了服务器,但是,在停止/重置时它说
* Stopping Nginx Server... [fail]
当然,守护进程不会停止,并且在重新启动时不会重新加载配置。
我该如何修复这个?
我已经安装了 nginx 1.0.11 的 Ubuntu 11.04 i386 服务器。另外,我正在使用这个 init.d script,这是我在几个不同地方找到的唯一一个。它很好地启动了服务器,但是,在停止/重置时它说
* Stopping Nginx Server... [fail]
当然,守护进程不会停止,并且在重新启动时不会重新加载配置。
我该如何修复这个?
它很可能无法终止该进程。
打开位于 /etc/init.d/(或 /etc/rc.d/)中的 nginx sysvinit 脚本并找到 nginx.pid 的位置。它将类似于“/var/run/nginx.pid”。
如果 pid 文件不存在,请打开 nginx.conf 并查找 pid 设置。如果不匹配 - 将 conf 值设置为脚本认为它应该在的位置,例如
# pid of nginx process
pid /var/run/nginx.pid;
sudo service nginx restart
会给你这样的东西:
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()
然后通过他们的端口手动终止进程:
sudo fuser -k 80/tcp
(或使用您正在使用的任何端口)
或者,通过它们的 ID 杀死进程:
ps -ef |grep nginx
kill <pid>
试试这个命令:
sudo fuser -k 80/tcp
我也遇到过类似的问题。
通常我使用 apache/apache2。
以下内容可能对您有所帮助:
sudo nginx -s stop | ps -ef | grep nginx | awk {'print $2'} | xargs sudo kill -9 | sudo service apache2 start
有关文档,请参阅此Github Gist
nginx.conf
service nginx stop
,它会停止根据其定义PID的进程/usr/lib/systemd/system/nginx.service
(您的路径可能不同)
基本上,您在位置 A 写入 PID 并尝试从位置 B 读取它。这种不一致似乎是这个明显常见问题的根本原因。
我们需要确保读取和写入位置相同。
如何?nginx.conf
:和中定义的pid文件nginx.service
应该是一样的。
lsof -i | grep nginx
这将为您提供 pid。就我而言,有两个。
kill -9 pid1
kill -9 pid2
(可能不需要)这是我修改的 nginx 初始化脚本(基于过时的官方初始化脚本),适用于许多基于 debian 的发行版,包括 Ubuntu 11.04:
https://github.com/hulihanapplications/nginx-init-debian
这在我的 ubuntu 服务器上运行良好。希望这可以帮助。
这是我修改的一个nginx初始化脚本(基于官方的init脚本),我制作了脚本的变量
lockfile=$pidfile
和变量
pidfile="/var/run/nginx.pid"
然后我修改了配置文件(nginx.conf
),我制作了变量
pid="/var/run/nginx.pid"
也。
终于可以正常使用所有的nginx命令了。