15

我已经安装了 nginx 1.0.11 的 Ubuntu 11.04 i386 服务器。另外,我正在使用这个 init.d script,这是我在几个不同地方找到的唯一一个。它很好地启动了服务器,但是,在停止/重置时它说

* Stopping Nginx Server...      [fail]

当然,守护进程不会停止,并且在重新启动时不会重新加载配置。

我该如何修复这个?

4

7 回答 7

30

它很可能无法终止该进程。

打开位于 /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;
于 2012-02-26T19:05:11.497 回答
15

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>
于 2014-10-06T11:45:38.387 回答
3

试试这个命令:

sudo fuser -k 80/tcp
于 2015-07-09T21:56:43.253 回答
1

我也遇到过类似的问题。

通常我使用 apache/apache2。

以下内容可能对您有所帮助:

sudo nginx -s stop | ps -ef | grep nginx | awk {'print $2'} | xargs sudo kill -9 | sudo service apache2 start

有关文档,请参阅此Github Gist

于 2014-10-18T09:04:00.123 回答
1

这个问题的原因

  • 当你启动 nginx 时,它会将 pid 写入定义在nginx.conf
  • 当您运行时service nginx stop,它会停止根据其定义PID的进程/usr/lib/systemd/system/nginx.service(您的路径可能不同)
    • 这意味着该过程实际上并未停止。
  • 当您尝试再次启动它时,它会尝试绑定到同一个端口并引发错误。

基本上,您在位置 A 写入 PID 并尝试从位置 B 读取它。这种不一致似乎是这个明显常见问题的根本原因。

解决方案

适当的修复:

我们需要确保读取和写入位置相同。

如何?nginx.conf:和中定义的pid文件nginx.service应该是一样的。

修补程序:

  1. lsof -i | grep nginx

这将为您提供 pid。就我而言,有两个。

  1. kill -9 pid1
  2. kill -9 pid2(可能不需要)
于 2019-06-17T09:26:46.590 回答
0

这是我修改的 nginx 初始化脚本(基于过时的官方初始化脚本),适用于许多基于 debian 的发行版,包括 Ubuntu 11.04:

https://github.com/hulihanapplications/nginx-init-debian

这在我的 ubuntu 服务器上运行良好。希望这可以帮助。

于 2012-01-17T21:51:35.533 回答
0

这是我修改的一个nginx初始化脚本(基于官方的init脚本),我制作了脚本的变量

lockfile=$pidfile 

和变量

pidfile="/var/run/nginx.pid"

然后我修改了配置文件(nginx.conf),我制作了变量

pid="/var/run/nginx.pid" 

也。

终于可以正常使用所有的nginx命令了。

于 2019-10-12T09:45:14.973 回答