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