Nodejs nohup没有例外地死亡

我正在写我的第一个NodeJS应用程序,但由于某种原因,它似乎在短时间内意外死亡。 我不知道是什么原因造成的。 这个过程运行良好,甚至按预期工作,然后由于某种原因,它停止。 nohup日志不显示错误或任何反馈。

我曾尝试在debugging模式下运行,但它是一样的,没有任何信息。 跟踪没有帮助。

我通过nohup运行进程:

nohup node app.js & 

码:

 var http = require('http'); var server = http.createServer().listen(8000); var io = require('socket.io').listen(server); var cookie_reader = require('cookie'); var querystring = require('querystring'); // Store the session cookie set by Django io.configure(function(){ io.set('authorization', function(data, accept){ if(data.headers.cookie){ data.cookie = cookie_reader.parse(data.headers.cookie); return accept(null, true); } return accept('error', false); }); io.set('log level', 1); }); io.sockets.on('connection', function (socket) { socket.on('shoutbox_send', function(message){ values = querystring.stringify({ comment: message, sessionid: socket.handshake.cookie['sessionid'], }); try { var options = { host: 'www.example.com', port: 80, path: '/shoutbox/node_api', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': values.length } }; var req = http.get(options, function(res){ res.setEncoding('utf8'); res.on('data', function(message){ socket.emit('shoutbox_receive', message); socket.broadcast.emit('shoutbox_receive', message); }); }); req.write(values); req.end(); } catch (err) { console.log(err); socket.emit('shoutbox_receive', err); } }); }); 

提前致谢,

如果你用Forever.js运行你的应用程序,它将会有2个效果可能对你有帮助:

(1)它会在终止时自动重启你的应用程序

(2)它应该给你一个退出消息

 warn: Forever detected script exited with code: [EXIT CODE] 

这应该能够更容易地跟踪这个问题

永远运行这个过程,或者pm2都是很棒的模块,他们会给出正确的回溯信息。

我面临类似的问题(但不知道是否有一个共同的原因)

解答:

  1. SSH到服务器
  2. 运行nohup node app.js &一样正常
  3. 按Ctrl + C从nohup退出
  4. 顺利退出ssh,即通过退出命令而不是仅仅closuresterminal。

最后一点很重要我没有正确退出ssh ,因此它被杀死了。

使用nohup node app.js >> log.txt来获取日志文件中的exception

你不应该这样运行。 nohup过程的定义是:

nohup – 运行一个免于hangups的命令,输出到非tty

另外,nohup从一个shell改变到另一个,基本上这意味着你不会在不同的linux发行版上得到相同的行为。

你应该像我在我公司的服务器上那样运行它:

 /usr/local/bin/node app.js > /var/log/node_js.log 2>&1 

然后按:

 Ctrl-Z 

然后input:

 bg 

该进程将在后台运行并输出其错误,并将日志输出到/var/log/node_js.log。 万一它会失败,你会看到该文件中的失败原因。

您可以使用以下方式定期将您必须的ssh会话保留给服务器:

 exit