Node Express Ubuntu Pm2 |下载EADDRINUSE

时间:2018-06-22 12:22:48

标签: express pm2

我有一个使用pm2服务和nginx在Ubuntu上运行的节点快递应用程序。启动pm2服务一切正常,我的应用程序可以访问。导航到应用程序上的另一个页面后,pm2 list会将我的应用程序显示为status: errored。当我查看错误日志时,看到一个循环:

Error: listen EADDRINUSE :::4300

我认为我只需要使用port 4300查找服务并将其杀死,但这已经成为一个问题。当我运行lsof -w -n -i tcp:4300时,确实看到了ID为23350的服务。然后,我运行kill -15 23350时,显然会终止该进程,但是会立即启动新服务。我尝试停止,启动和重新启动pm2时没有运气。当我停止pm2时,我什至无法运行npm run start,因为我得到Error: listen EADDRINUSE :::4300

导航到应用程序的另一个页面时,为什么pm2崩溃? 为什么当pm2崩溃时,它抱怨端口4300已被使用?

我应该注意,当pm2 list报告状态:错误时,除了/ contact页面上的表单提交时,我的应用仍然可以访问。它使用app.post('/contact'...)提交给自己,但是在浏览器中,我看到一个空白的空白屏幕,上面显示“无法发布/联系人”。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题(杀死了节点进程但又产生了一个)并最终解决了它。我可能使用了一些错误的 UNIX 术语,如果使用,请纠正我。

我在 AWS EC2 实例上运行 pm2,操作系统是 Ubuntu 20.04。

我的问题是 root 用户的 pm2 进程似乎与 ubuntu(默认)用户的进程是分开的。当我是默认用户并运行 pm2 status 时,我看到我的一个停止的节点进程。当我使用 sudo su 切换到 root 用户并运行 pm2 status 时,我发现另一个正在运行的 pm2 进程没有在我是默认用户时列出!所以我以 root 用户身份运行 pm2 stop all 并解决了我的问题。

步骤:

  1. sudo su # switch to root user
  2. pm2 status # list all processes. For me this listed an extra running process that wasn't listed when I was the default user.
  3. 我刚刚运行 pm2 stop all 来停止所有 root 用户进程。如果需要,您也可以使用 pm2 stop <name of pm2 process> 停止特定的运行进程。

希望对某人有所帮助!