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都是很棒的模块,他们会给出正确的回溯信息。
我面临类似的问题(但不知道是否有一个共同的原因)
解答:
- SSH到服务器
- 运行
nohup node app.js &
一样正常 - 按Ctrl + C从nohup退出
- 顺利退出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