我安装了nginx 1.0.11的Ubuntu 11.04 i386服务器。此外,我正在使用this init.d script,这是我在几个不同的地方找到的唯一一个。它可以很好地启动服务器,但是,在停止/重置时它会显示
* Stopping Nginx Server... [fail]
当然,守护程序没有停止,重启后配置不会重新加载。
我该如何修复?
答案 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.conf
中定义的文件中
service nginx stop
时,它将停止其PID根据/usr/lib/systemd/system/nginx.service
定义的进程(您的路径可能不同)
基本上,您是在位置A上编写PID,然后尝试从位置B读取它。这种不一致似乎是此表面上常见问题的根本原因。
我们需要确保读写位置相同。
如何?:
nginx.conf
和nginx.service
中定义的pid文件应该相同。
lsof -i | grep nginx
这将给您pid。就我而言,有两个。
kill -9 pid1
kill -9 pid2
(可能不是必需的)答案 6 :(得分:0)
这是我修改过的nginx初始化脚本(基于官方的初始化脚本),我将脚本的变量设为
lockfile=$pidfile
和变量
pidfile="/var/run/nginx.pid"
然后我修改了配置文件(nginx.conf
),创建了变量
pid="/var/run/nginx.pid"
也是。
最后我可以正常使用所有nginx命令。