Nodejs nohup毫无例外地消亡
Nodejs nohup dieing without an exception
我正在编写我的第一个NodeJS应用程序,但由于某种原因,它似乎在短时间后意外死亡。我不知道是什么原因造成的。这个过程运行得很好,甚至像预期的那样工作,但由于某种原因,它就停止了。nohup日志没有显示错误或任何反馈。
我试过在调试模式下运行它,但它是一样的,没有任何信息。追踪毫无帮助。
我通过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);
}
});
});
提前感谢,
我遇到了类似的问题(但不知道是否有共同的原因)
解决方案:
- ssh到服务器
- 正常运行
nohup node app.js &
- Ctrl+c退出nohup
- 优雅地从ssh退出,即通过退出命令,而不仅仅是关闭终端
最后一点很重要,我没有正确退出ssh,因此它被杀死了。
如果你用Forever.js运行你的应用程序,它将有两个可能对你有帮助的效果:
(1) 它将在终止时自动重新启动您的应用程序
(2) 它应该会给你一个类似的退出信息
warn: Forever detected script exited with code: [EXIT CODE]
这应该可以更容易地跟踪的问题
使用forever或pm2运行进程。这两个模块都是很棒的模块,它们将在失败的地方提供适当的回溯。
使用nohup node app.js >> log.txt
在日志文件
您不应该以这种方式运行它。nohup过程的定义是:
nohup-运行一个不受挂起影响的命令,输出到非tty
此外,nohup从一个shell更改为另一个shell,这基本上意味着在不同的linux发行版上,这个进程不会得到相同的行为。
你应该像我在我们公司的服务器上一样运行它:
/usr/local/bin/node app.js > /var/log/node_js.log 2>&1
然后按:
Ctrl-Z
然后输入:
bg
进程将在后台运行,并将其错误和输出日志输出到/var/log/node_js.log。如果失败,您将在该文件中看到失败原因。
您可以定期将ssh会话留给服务器,使用:
exit