gpt4 book ai didi

macos - nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use) 在 mac 上

转载 作者:行者123 更新时间:2023-12-04 15:36:30 26 4
gpt4 key购买 nike

我是 Nginx 的新手,在这里遇到了一些麻烦。

我正在使用 Mac 操作系统 nginx version: nginx/1.17.7 .

第一次下载 Nginx 是前段时间。那个时候,一切都运行得很完美。然后当我玩弄nginx.conf ,我以某种方式把它搞砸了。所以,当我今天重新开始学习 Nginx 时,我删除了我之前拥有的所有文件,并通过 homebrew 重新安装了它。然后我希望有人可以帮助我解决的问题突然出现。

初始化 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 already in use)
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 already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] still could not bind()

我在网上搜索了这个问题。有很多答案,但要么是针对 Linux 而不是 Mac 的解决方案,要么就是无法工作。

我发现的最有希望的答案之一是杀死 processes那是在使用端口。顺便说一句,即使我有这个错误,我也可以访问页面 localhost:8080 ,但它是 403 Forbidden page .然后我在 Terminal 上尝试了一个命令: ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)' ( source )

这是输出:
  PID  PPID  %CPU      VSZ WCHAN  COMMAND
21827 1 0.0 4291640 - nginx: master process nginx
21828 21827 0.0 4301348 - nginx: worker process
21831 93689 0.0 4267768 - egrep (nginx|PID)

我没有(仍然不明白)这说明了什么,所以我试图通过 kill -9 <PID> 杀死所有这些人。 , 即 kill -9 21827 , kill -9 21828 , 和 kill -9 21831 .

然后我得到一个错误: -bash: kill: (21827) - Operation not permitted .我只是想也许 sudo可以解决这个问题,所以我尝试了 sudo kill -9 21827 .而这一次 成功了 .我杀死了所有进程,但第三个进程除外。当我尝试 sudo kill -9 21831 , 我收到了 No such process .然后我发现是因为 PID此进程的名称是 一直在变出于某种原因,所以如果我没有在那个确切的时刻捕捉到进程的确切 PID,我就无法杀死它。然后我就这样把它留在了那里。

然后我尝试运行 nginxTerminal .这是输出:
nginx: [emerg] open() "/usr/local/var/run/nginx.pid" failed (13: Permission denied)

这次我没有找到有可能解决这个问题的答案......所以我尝试了 重启 nginx 通过命令 sudo nginx -s stop && sudo nginx ( source ) 但这没有用。已举报 nginx: [alert] kill(21827, 15) failed (3: No such process) .所以我尝试了同一来源提供的另一个答案: brew services list然后 brew services start nginx .

但我还是收到了 nginx: [emerg] open() "/usr/local/var/run/nginx.pid" failed (13: Permission denied) .

现在我不知道如何解决这个问题。我还尝试通过自制软件重新安装 nginx。但是之前的过程会像它们一样弹出。

另外,我也试过这个命令: ps aux | grep nginx .在我杀死进程之前,这给了我三个进程。在所有这些之后,我得到了
apple            22922   0.0  0.0  4267768    832 s003  S+    3:09AM   0:00.00 grep nginx

不知道这能说明什么。

有什么可以帮助的吗?或者,您能否分享运行 Nginx 的正确初始步骤?

最佳答案

这里发生了很多事情。首先,Mac OS 是 Linux 的近亲。许多 Linux 解决方案/命令将在您的 Mac 上本地运行。那些没有的通常可以修改以使其工作。在某些情况下,您可能需要安装 Mac OS 中默认未安装的其他命令行工具。

二、ps是“进程状态”的缩写。顾名思义,它是一个报告在您的机器上运行的进程状态的命令(您的权限允许您查看)。使用 kill 当然是可能的,有时可能是必要的。终止进程。但是,如果您不知道自己在做什么,我不会推荐它。正如您所发现的,根据您的操作系统权限/设置,您可能需要使用 sudo覆盖。依靠 nginx 命令来启动和停止正在运行的 nginx 服务器可能更好。这将做的一件事是允许这些操作“优雅地”执行,也就是说“干净地”和“没有意外的副作用”。稍后再谈。

您的 ps 中第三个进程的 PID 不断变化的原因输出是因为该进程是 egrep过程本身被报告。每次运行命令时,都会出现一个新的 egrep命令被执行并获得它自己 Shiny 的新 PID。

在您的 ps 中需要注意的另一件事输出:有 2 nginx过程。一个是师傅,一个是 worker 。只要主进程在运行,您就可以一遍又一遍地杀死工作进程,主进程将产生一个新的工作进程(具有另一个新的 PID)。文档说“主进程的主要目的是读取和评估配置文件,以及维护工作进程。”

现在,听起来另一个进程已经在使用端口 8080。您可以通过运行以下命令来发现该进程是什么:
lsof -nPL -iTCP:8080
取决于什么lsof命令返回,您可以使用报告的 PID 退出程序或终止进程。 .如果由于某种原因,您不能或不想终止违规进程,那么您将不得不更改 nginx 的配置。 .

正如错误消息所暗示的那样,您现在遇到了文件 /usr/local/var/run/nginx.pid 的权限问题。正在阻止 nginx从开始。该文件包含提供给 nginx 的 PID。启动时的过程。当您发出命令 nginx -s stop ,它正在尝试从该文件中读取先前分配的 PID。当它不能时,它会失败并显示您看到的错误消息。

使用 kill 的意外副作用终止 nginx过程是他们没有机会自己清理。他们在关机时做的一件事是删除 nginx.pid包含先前分配的 PID 的文件。好消息是,如果该文件不存在,那么 nginx将创建一个新的。所以你所要做的就是运行 sudo rm /usr/local/var/run/nginx.pid然后运行 ​​nginx .

关于macos - nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use) 在 mac 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59568777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com