【问题标题】:How to restart nginx on OS X如何在 OS X 上重启 nginx
【发布时间】:2012-12-20 00:47:21
【问题描述】:

我在 OS X 10.8 上使用 nginx。新安装的nginx 但除了kill nginx_pidkill 64116 之外找不到重启nginx 的方法。想知道是否有更好的方法来重启nginx

在 Google 和 SO 上找到了一些方法,但没有奏效:

nginx -s restart

sudo fuser -k 80/tcp ; sudo /etc/init.d/nginx restart

nginx -s restart 的错误信息是

nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)

有时也会收到此错误消息:

nginx: invalid option: "-s restart"

【问题讨论】:

    标签: macos nginx restart


    【解决方案1】:

    在启动 nginx 之前尝试运行sudo nginx

    【讨论】:

    • nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use) nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address已经在使用)nginx:[emerg] 绑定()到 0.0.0.0:8080 失败(48:地址已经在使用中) nginx:[emerg] 绑定()到 0.0.0.0:8080 失败(48:地址已经在使用中) nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use) nginx: [emerg] still could not bind()
    • @pinouchon 我明白了。我想停止并重新启动
    【解决方案2】:

    要重新加载配置文件:

    sudo nginx -s reload
    

    完全重启nginx

    sudo nginx -s quit
    sudo nginx
    

    详情

    nginx 没有restart 信号。从文档中,以下是主进程接受的信号:

    SIGINT, SIGTERM  Shut down quickly.
    SIGHUP           Reload configuration, start the new worker process with a new configuration, and gracefully shut down old worker processes.
    SIGQUIT          Shut down gracefully.
    SIGUSR1          Reopen log files.
    SIGUSR2          Upgrade the nginx executable on the fly.
    SIGWINCH         Shut down worker processes gracefully.
    

    大概您可以手动将这些信号发送到进程 id,但是 nginx 命令具有标志 nginx -s <signal> 会为您向主进程发送信号。您的选择是:

    stop    SIGTERM
    quit    SIGQUIT
    reopen  SIGUSR1
    reload  SIGHUP
    

    无需手动使用 pid。


    编辑: 刚刚意识到这些信息中的大部分已经在其他答案的 cmets 中了。还是把这个留在这里总结一下情况吧。

    【讨论】:

    • 我得到这个 sudo nginx -s reload nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)跨度>
    • 这对代理很有帮助:'nginx' 本身让我的服务运行。我以为它会像很多人一样自动启动。在我这样做之前,我的错误与之前的评论完全相同。谢谢。
    【解决方案3】:

    你的 nginx pid 文件位置是什么?这是在配置文件中指定的,默认路径在配置脚本中指定编译时。你可以这样搜索它:

    find / -name nginx.pid 2>/dev/null(必须在 nginx 运行时发出)

    解决方案:

    sudo mkdir -p /usr/local/var/run/
    ln -s /current/path/to/pid/file /usr/local/var/run/nginx.pid
    

    【讨论】:

    • 通过运行上面的find 命令,我发现/usr/local/var/run/nginx.pid 确实存在。现在的错误信息是nginx: invalid option: "-s restart"
    • 那是因为它不是一个有效的信号。检查man 页面(无论如何你都应该这样做):Send signal to a master process: stop, quit, reopen, reload.
    • 模拟重启似乎更好的方法是nginx -s stop; nginx
    • nginx -s reload 如果您只需要更新配置
    • @allieferr 如果您运行file /usr/local/var/run/nginx.pid,您会看到它是指向另一个位置(可能是包管理器的安装目录)的符号链接。运行sudo rm /usr/local/var/run/nginx.pid; sudo touch /usr/local/var/run/nginx.pid 来解决这个问题。除非问题是该路径中的祖先是符号链接,在这种情况下,您必须进行一些挖掘。
    【解决方案4】:
    $ sudo nginx -c /usr/local/etc/nginx/nginx.conf
    $ sudo nginx -s reload
    

    来源链接:https://blog.csdn.net/github_33644920/article/details/51733436

    【讨论】:

    • 这是唯一对我有用的答案。谢谢!
    【解决方案5】:

    试试这个:

    sudo nginx -s stop

    后跟一个:

    sudo nginx

    似乎 nginx 跟踪它的状态,如果你停止它两次,它会抱怨。但以上对我有用。

    【讨论】:

    • 讽刺的是sudo nginx 解决了这个问题。之后,我能够重新加载并运行服务器而没有任何错误。
    【解决方案6】:

    我是这样做的:

    先杀进度

    ps aux | grep nginx
    kill -9 {pid}
    

    然后启动nginx

    nginx
    

    有效!

    【讨论】:

    • 这个方法对我不起作用!我想知道9是什么意思?
    【解决方案7】:

    作为未来资源,可以咨询http://wiki.nginx.org/CommandLine

    Nginx 可能以 root 身份运行,因此您需要运行以下命令的变体来影响它。

    sudo nginx -s stop | reload | quit | reopen
    

    通常没有太多理由像Apache 那样重新启动Nginx。如果您修改了配置文件,您可能只想重新加载选项。

    【讨论】:

    • nginx: [error] invalid PID number "" in "/usr/local/var/run/nginx.pid" ...
    【解决方案8】:

    检查此目录是否存在:

    /usr/local/var/run
    

    当 nginx 尝试初始化 pid 文件时,可能会发生此错误 不存在的本地化。

    【讨论】:

      【解决方案9】:

      这里有一个错误。根据您修改/重新启动 apache 和/或修改 nginx 配置时 nginx 是否正在运行,这个文件(本质上只是一个进程 ID 指针)可能会被销毁。

      当你尝试向 nginx 发送任何信号时

      nginx -s quit;
      nginx -s stop;
      nginx -s reload;
      

      nginx 使用这个文件来引用它需要向其发送信号的进程的 ID。如果文件不存在,则 nginx 的活动运行进程和 cli 应用程序之间的链接实际上被破坏了。

      我实际上最终处于两个 nginx 进程同时运行的状态,所以两个进程都被杀死了。

      要解决这个问题,您可以通过活动监视器强制终止现有的 nginx 进程(然后运行 ​​nginx 并让 cli 应用程序创建一个新的 nginx.pid 文件),或者如果您确实需要保持 nginx 运行但想要运行 nginx -s reload - 在 /run 路径下手动创建一个名为 nginx.pid 的文件,并插入当前正在运行的 nginx 进程的 PID(通过 Activity Monitor 获得)。

      【讨论】:

      • 将有助于显示如何通过命令行杀死这些进程的代码。
      【解决方案10】:

      要重新加载自定义配置文件,请使用

      nginx -s reload -c /etc/nginx/conf.d/<config file>.conf
      

      【讨论】:

        【解决方案11】:

        这可能只是意味着 nginx 已经停止 - 目前没有运行。
        首先确认nginx是否在运行,执行:

        $ ps aux | grep nginx
        

        【讨论】:

          【解决方案12】:

          我得到了相同的错误链接,我尝试了很多方法来修复它但它不起作用 之后我运行命令行,它运行良好: nginx -c /usr/local/etc/nginx/nginx.conf

          我从这里得到的信息 https://blog.csdn.net/wn1245343496/article/details/77974756

          【讨论】:

          • 在我看来,这是一个比留下符号链接更好的解决方案
          【解决方案13】:

          停止或重新加载的一种方法是通过以下命令,

          停止:

          sudo /usr/local/nginx/sbin/nginx -s stop 
          

          仅当 nginx 正在运行时才运行 reload:

          sudo /usr/local/nginx/sbin/nginx -s reload
          

          通过上面的操作,你不会得到 nginx: [error] open() "/usr/local/var/run/nginx.pid" 这个问题

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-11-11
            • 2016-04-27
            • 2013-08-01
            • 2011-10-26
            • 2018-07-09
            • 1970-01-01
            • 2011-12-20
            相关资源
            最近更新 更多