【问题标题】:MEAN App on server crashes服务器上的平均应用程序崩溃
【发布时间】:2017-10-26 00:17:47
【问题描述】:

我尝试在 Nginx 服务器上运行 MEAN 应用程序,但它总是在以下情况下崩溃:

// port is 8080
app.listen(port, (data) => {
  console.log('Listening on port ' + port + ' in ' + process.env.NODE_ENV + ' mode');
});

我的防火墙状态是

Status: active
To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere  
Nginx Full                 ALLOW       Anywhere   
8080                       ALLOW       Anywhere  
OpenSSH (v6)               ALLOW       Anywhere (v6) 
Nginx Full (v6)            ALLOW       Anywhere (v6)             
8080 (v6)                  ALLOW       Anywhere (v6)  

错误

listen EADDRINUSE :::8080

我使用this tutorial 来设置服务器。

好像 8080 已经在使用了,但是我怎样才能找到它的用途并修复它呢?

【问题讨论】:

  • @skirtle 已更新
  • 您可以尝试使用netstat 来确定该端口上的内容,或者尝试连接到端口8080(例如使用curl)以查看是否有任何响应。
  • 似乎您的应用程序已经在运行并且您正在尝试启动另一个实例,或者其他东西已经在该端口上侦听。这是一个端口绑定问题
  • @TarunLalwani 是的,它似乎已经在运行,我该如何终止这个进程?
  • ps aux | grep node,获取id并使用kill -9 <id>或使用pkill node

标签: node.js ubuntu express nginx mean-stack


【解决方案1】:

既然你提到你按照教程学习

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04

这表明您运行了 PM2,即使您杀死它,它也会重新启动节点。所以你需要停止 PM2

sudo pkill PM2

然后你就可以正常启动你的节点程序了

【讨论】:

    【解决方案2】:

    要尝试获取正在侦听端口的进程,请输入:

    sudo netstat -tulpn | grep :8080
    

    这应该可以告诉您使用该端口的内容。

    然后通过 PID 杀死一个进程,只需使用

    sudo kill pid
    

    来自https://www.cyberciti.biz/faq/what-process-has-open-linux-port/

    另一种方法是直接使用sudo fuser -k 8080/tcp 杀死 TCP 上端口 8080 上的进程。

    【讨论】:

    • 确实如此,我发现它是 PID。我怎样才能终止它?
    • 好的,刚刚更改了端口,现在可以使用了,谢谢 :)
    • 现在包含了一种通过 PID 杀死进程的方法。看来我被@TarunLalwani打败了。
    • 我厌倦了,但每次我杀死它时,它都会用另一个 PID 再次运行
    • 那里,添加了一个带有 fuser 的方法,就像它正在杀死可能在 Google 上找到它的人的另一个进程。
    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多