Nodejs nohup умирает без исключения
Я пишу свое первое приложение 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);
}
});
});
Спасибо заранее,
Ответы
Ответ 1
Если вы запустите приложение с Forever.js, у него будет 2 эффекта, которые могут вам помочь:
(1) он автоматически перезапустит ваше приложение, когда оно завершает
(2) он должен дать вам сообщение выхода, например
warn: Forever detected script exited with code: [EXIT CODE]
что должно облегчить отслеживание проблемы.
Ответ 2
Запустите процесс, используя forever или pm2, оба являются удивительными модулями, они будут давать правильный обратный трассу, где он потерпел неудачу.
Ответ 3
У меня возникла аналогичная проблема (но не знаю, есть ли общая причина)
Решение:
- ssh на сервер
- запустите
nohup node app.js &
как обычно
- Ctrl + c для выхода из nohup
- Изящно выйдите из ssh i.e через команду exit, не закрыв терминал.
Последнее, что важно, я не выходил из ssh правильно, поэтому он был убит.
Ответ 4
используйте nohup node app.js >> log.txt
, чтобы получить исключение в файле журнала
Ответ 5
Вы не должны запускать его таким образом.
Определение nohup-процесса:
nohup - запустить команду, не зависящую от зависаний, с выходом на не-tty
Кроме того, nohup изменяется от одной оболочки к другой, в основном это означает, что вы не получите одинаковое поведение для этого процесса на разных дистрибутивах Linux.
Вы должны запустить его, как я делаю на наших серверах в моей компании:
/usr/local/bin/node app.js > /var/log/node_js.log 2>&1
затем нажмите:
Ctrl-Z
а затем введите:
bg
Процесс запустится в фоновом режиме и выведет его ошибку и выводит журналы на /var/log/node _js.log. В противном случае вы увидите причину отказа в этом файле.
Вы можете регулярно оставлять сеанс ssh на сервере, используя:
exit