问题概述
最近在在启动 nginx 时,发现报错 nginx: [emerg] bind() to 0.0.0.0:443 failed (48: Address already in use)
,发现是端口被占用了
我也很懵,想着重启可以解决90%问题的态度,我重启了,果然重启是有效果的。
但是过两天发现又启动不了,还是443被占用,然后又重启,发现重启后就可以。但是每次出问题都重启电脑吧。
后来秉着对技术的热情,还是要排查一下问题。后面果然又出现问题了。
问问GPT
按照GPT
的指引 sudo lsof -i :443
看来看去,看不懂,还是去问问广大网友。
网上排查
后来网上查了很多资料,从stackoverflow
查到 csdn
都没有解决,大部分都是说有多个nginx启用,需要全部关闭,再启动,可是我看了半天都只有一共nginx,在活动监视器里没有nginx,包括sudo lsof -i :443
也没有看到有其他的nginx进程在启动。
最终还是只能靠自己
后来想想端口被占用启动不了,但是重启电脑后,可以启动,这个时候端口没有被占用。端口占用时我查看了一下sudo lsof -i :443
,重启后我再次查看443端口的占用情况sudo lsof -i :443
,
后来我发现了一个问题,在重启后这个node进程没了。
我也不知道这啥意思啊,问问GPT
吧
原来就是这个进程在占用443端口。 然后我就
kill -9 66739
nginx
nginx: [emerg] bind() to 0.0.0.0:443 failed (48: Address already in use)
我特发,还是启动失败。 然后我又查看了一下端口占用情况。
发现它又重启了,还在占用443,又kill
试下,还是被重启😑。
不行还是要靠GPT
我发现一个东西,PM2
,这个我发现我好像见过,就是在第一次启动公司项目时装过,当时也不知道这是干啥的。
然后执行pm2 list
好像就是这个进程,按照GPT
的指示,pm2 stop 0
然后查看443端口占用情况,果然那条node进程没了。
最后nginx
启动
终于启动了😭😭😭。
再次查看为什么有pm2
后来发现一个问题,公司的项目A启动时不需要 nginx 但是启动脚本会用到pm2,关闭项目时不会关闭这个进程;公司项目B,需要用到nginx,进行代理,
所以每次启动项目A后 再启动 nginx 就会被占用,导致开发B项目就无法启动。
PM2
是什么呢?
让GPT
来解答吧