使用nohup或forever运行node时出现错误:EBADF,坏的文件描述符

16

我遇到了一个问题,使用node.js运行一个小型Web服务器从文件系统中提供文件。如果使用node server.js启动它时,它能正常工作,但如果使用nohup或forever启动,则无法找到文件。

4个回答

16
这对我很有用:
nohup node server.js </dev/null

哇,我不知道为什么,但这个方法有效。< /dev/null 禁用了 nohup 命令的手动输入,但这与文件路径有何关系,我不知道。我个人使用的是 supervisor 而不是 forever,但错误是相同的。我要补充一点的是,在 supervisor 更新后,它开始监听手动输入,因此需要这个方法。 - Louis Ameline
这是正确的答案。我遇到了同样的问题 - 直接执行 node file.js 没有问题,但使用 nohup 执行时却出现了上面提到的 EBADF 错误。为了方便其他人,我在这里放出完整的命令,同时记录输出和错误: nohup node file.js </dev/null > scriptresults.log 2> scripterror.log & - Lior Gross

4

这里的另一个解决方案是使用括号在子shell中运行命令。 (nohup node index.js)


2

问题出在文件路径上。当使用node运行服务器时,工作目录与server.js文件相同,因此node.js可以找到该文件。

但是,当使用nohup启动或只是使用forever启动时,工作目录似乎与server.js不同。

我通过在文件名前加上全局变量__dirname来解决这个问题。


5
可以请您分享在添加全局变量 __dirname 后的完整命令。 - Monti Chandra
你能分享更多信息吗?我在Windows上也遇到了这个问题。 - Xin
@Xin 我在服务器代码中使用了 __dirname 来检索文件,而不是通过 forever 启动服务器时。 - javabeangrinder

0

我来到这里是为了解决一个问题,这个问题在Windows上时不时出现,当有一些nodejspython脚本相互调用时。

解决方案是在从Python代码调用nodenpm之前取消设置NODE_CHANNEL_FD环境变量。

解决方案来源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接