Nginx守护进程停止失败

时间:2012-01-13 21:18:30

标签: ubuntu nginx daemon init.d

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

* Stopping Nginx Server...      [fail]

当然,守护程序没有停止,重启后配置不会重新加载。

我该如何修复?

7 个答案:

答案 0 :(得分:28)

它很可能无法杀死这个过程。

打开位于/etc/??.d/nginx中的nginx脚本,找到nginx.pid的位置。它会像“/var/run/nginx.pid”。

如果pid文件不存在,请打开nginx.conf并查找pid设置。如果它不匹配 - 将conf值设置为脚本认为应该的位置,例如

# pid of nginx process
pid /var/run/nginx.pid;

答案 1 :(得分:13)

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>

答案 2 :(得分:3)

尝试此命令:

sudo fuser -k 80/tcp

答案 3 :(得分:1)

我遇到过类似的问题。

通常我使用apache / apache2。

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

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

有关文档,请参阅此Github Gist

答案 4 :(得分:0)

这是我修改的nginx init脚本(基于过时的offical init script),它适用于许多基于debian的发行版,包括Ubuntu 11.04:

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

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

答案 5 :(得分:0)

此问题的原因

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

基本上,您是在位置A上编写PID,然后尝试从位置B读取它。这种不一致似乎是此表面上常见问题的根本原因。

解决方案

正确的解决方法:

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

如何?nginx.confnginx.service中定义的pid文件应该相同。

修补程序:

  1. lsof -i | grep nginx

这将给您pid。就我而言,有两个。

  1. kill -9 pid1
  2. kill -9 pid2(可能不是必需的)

答案 6 :(得分:0)

这是我修改过的nginx初始化脚本(基于官方的初始化脚本),我将脚本的变量设为

lockfile=$pidfile 

和变量

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

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

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

也是。

最后我可以正常使用所有nginx命令。