Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos nginx:[emerg]bind()到0.0.0.0:8080在mac上失败(48:地址已在使用)_Macos_Nginx - Fatal编程技术网

Macos nginx:[emerg]bind()到0.0.0.0:8080在mac上失败(48:地址已在使用)

Macos nginx:[emerg]bind()到0.0.0.0:8080在mac上失败(48:地址已在使用),macos,nginx,Macos,Nginx,我是新来Nginx的,在这里遇到了一些麻烦 我使用的是macos和nginx版本:nginx/1.17.7 我第一次下载Nginx是很久以前。当时,一切都运转得很好。然后,当我玩nginx.conf时,不知怎么搞砸了。因此,当我今天重新开始学习Nginx时,我删除了以前所有的文件,并通过自制重新安装了它。然后,我希望有人能帮我解决的问题突然出现了 在初始化Nginx之后,我得到了这个错误 nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Addr

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

我使用的是macos
nginx版本:nginx/1.17.7

我第一次下载Nginx是很久以前。当时,一切都运转得很好。然后,当我玩
nginx.conf
时,不知怎么搞砸了。因此,当我今天重新开始学习Nginx时,我删除了以前所有的文件,并通过自制重新安装了它。然后,我希望有人能帮我解决的问题突然出现了

在初始化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的解决方案,要么就是无法工作

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

这就是输出:

  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)
nginx: [emerg] open() "/usr/local/var/run/nginx.pid" failed (13: Permission denied)
我不(仍然不)明白这说明了什么,所以我试图通过
kill-9
杀死他们,即
kill-921827
kill-92182
,和
kill-921831

然后我得到一个错误:
-bash:kill:(21827)-不允许操作
。我只是想也许
sudo
可以解决这个问题,所以我试着
sudo kill-9 21827
。这一次,它起了作用。除第三个进程外,我杀死了所有进程。当我试图
sudo kill-9 21831
时,我没有得到这样的过程。然后我发现这是因为这个过程的
PID
由于某种原因一直在变化,所以如果我当时没有捕捉到这个过程的确切PID,我就无法杀死它。然后我就这样把它放在那里了

然后我尝试在
终端上运行
nginx
。这就是输出:

  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)
nginx: [emerg] open() "/usr/local/var/run/nginx.pid" failed (13: Permission denied)
这次我没有找到一个有潜力解决这个问题的答案。。。因此,我尝试通过命令
sudo nginx-s stop&&sudo nginx
()重新启动nginx
,但没有成功。它报告了nginx:[alert]kill(21827,15)失败(3:没有这样的过程)
。因此,我尝试了同一来源中提供的另一个答案:
brew服务列表
,然后
brew服务启动nginx

但我仍然得到了nginx:[emerg]open()“/usr/local/var/run/nginx.pid”失败(13:权限被拒绝)

现在我不知道如何解决这个问题。我还尝试用自制软件重新安装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
命令,并获得自己的全新PID

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

现在,听起来另一个进程已经在使用端口8080。通过运行以下命令,您可以发现该进程是什么:

lsof-nPL-iTCP:8080

根据
lsof
命令报告的内容,您可以使用报告的
PID
退出程序或终止进程。如果出于某种原因,您不能或不想终止有问题的进程,则必须更改
nginx
的配置

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

使用
kill
终止