【发布时间】:2015-11-23 21:41:24
【问题描述】:
我是 Ubuntu 和 node express 的新手。但是我已经掌握了足够的知识,我能够使用 Forever 设置一个静态 Web 服务器,并在其旁边运行一个 REST API。我还成功安装了 Samba 以直接从我的 Windows 机器编辑文件。
大约一个月前,我启动并运行了我的静态网站。它上面有一个表单,对 REST API 服务执行 jQuery POST。使用 Forever,我运行了两个节点进程,一个用于静态网站服务,另一个用于 API 服务,两者都在同一个端口 80 上侦听。
一个月前一切正常,我可以加载静态网站并提交表单,然后我会通过我的 API 服务收到电子邮件通知。但大约一周前,一切都失败了,包括我的 Samba 文件共享。登录到我的服务器,“永久列表”为空。好的,所以我认为服务器必须在我不知情的情况下重新启动。然后我再次启动我的两个服务:
root@xxxxx:~/www/web/ourwedding# forever start staticserver.js
warn: --minUptime not set. Defaulting to: 1000ms
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info: Forever processing file: staticserver.js
root@xxxxx:~/www/web/ourwedding# forever start apiserver.js
warn: --minUptime not set. Defaulting to: 1000ms
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info: Forever processing file: apiserver.js
我永远运行列表:
root@xxxxx:~/www/web/ourwedding# forever list
info: Forever processes running
data: uid command script forever pid id logfile uptime
data: [0] IKkB /usr/bin/nodejs staticserver.js 469 471 /root/.forever/IKkB.log 0:0:0:26.307
data: [1] APxV /usr/bin/nodejs apiserver.js 479 481 /root/.forever/APxV.log STOPPED
我看到错误并去检查一下:
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1039:14)
at listen (net.js:1061:10)
at Server.listen (net.js:1135:5)
at EventEmitter.app.listen (/root/www/web/ourwedding/node_modules/express/lib/application.js:595:24)
at Object.<anonymous> (/root/www/web/ourwedding/apiserver.js:69:18)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
error: Forever detected script exited with code: 8
然后我花了接下来的几个小时试图弄清楚发生了什么。从我目前发现的情况来看,这个错误是因为我在同一个端口上运行这两个服务......但它之前工作正常吗?我必须在同一个端口上运行它们,因为我正在对同一个域进行 AJAX POST。
我尝试过的事情:
- 删除根目录下的 .forever 文件夹
- 重启服务器
- killall -9 nodejs
我没有尝试过的事情:
- 永远的不同解决方案
- 将我的静态 Web 服务器和 api 服务器组合成一个服务。
我想我只是想知道我是不是疯了,或者我是否在一个月前做了一些我一辈子都记不起来的事情,这让我可以在同一个端口上运行这两个服务。
欢迎任何帮助或建议。
谢谢。
【问题讨论】:
-
我不熟悉 Forever... 你确定你正确地终止了服务器吗?我相信你知道,
EADDRINUSE表示该地址已被使用。 -
重启系统,也许会有帮助。
EADDRINUSE表示您的进程已经启动,您正在尝试重新启动。
标签: javascript node.js ubuntu express forever