【问题标题】:Restarting nginx: nginxnginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)重启 nginx: nginxnginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
【发布时间】:2013-04-05 16:06:03
【问题描述】:

当我尝试使用 sudo /etc/init.d/nginx restart 重新启动 nginx 时,我会收到来自主题的消息。

我发现原因很可能是脚本不知道如何停止守护进程,因为启动时没有创建 pid 文件 (/var/run/nginx.pid)。

我在两台不同的服务器上安装了两个...一个是从源代码编译的,另一个是用 phusion 乘客提供的。

我试过这个命令:

start-stop-daemon --start --quiet --pidfile /var/run/nginx.pid --exec /usr/sbin/nginx -- -c /etc/nginx/nginx.conf

在两台机器上,其中一台创建了 pid 文件,而另一台则没有 - 在那台机器上,路径有点不同(但我认为这无关紧要):

start-stop-daemon --start --quiet --pidfile /var/run/nginx.pid --exec /opt/nginx/sbin/nginx -- -c /opt/nginx/conf/nginx.conf

进程启动,没有写入pid...

我在 Debian...

有什么建议吗?

【问题讨论】:

    标签: nginx bind pid


    【解决方案1】:

    解决办法是在 nginx.conf 中取消注释这一行:

    pid        /var/run/nginx.pid;
    

    看起来不同的安装方式不同,但正确的做法是取消注释。

    【讨论】:

      【解决方案2】:

      我可以通过运行以下 fuser 命令来解决此问题

      $ sudo fuser -k 80/tcp

      它会杀死正在使用端口 80 的任何进程。希望没有搞砸其他任何东西。

      这归功于: https://goo.gl/6oc0xD

      【讨论】:

        【解决方案3】:
        $ sudo nginx -t 
        

        查看所有进程,有时你没有完全权限

        【讨论】: