2016-05-10 4 views
1

INFO:Я имею в виду this вопрос, я спросил о Super User, но не смог получить ответ, и я думаю, что это хорошее место, чтобы спросить, так как проблема, вероятно, связана с кодом.HTTP-сервер останавливается через некоторое время (Node.js)

В настоящее время я запускаю простой сервер Node.JS с express.js на моем RaspberryPi с установленным на нем Debian. Все работает нормально, но каждое утро я просыпаюсь, чтобы увидеть, что мой сервер больше не работает (серверный процесс я начал с команды node main.js).

Мое первое предположение заключалось в том, что у Pi есть какой-то спящий режим, через который он входит через пару часов без трафика и т. Д., И который выключает сервер, но я также запускаю dydns-client, который все еще каждое утро (Мне также сообщили, что RaspberryPi не приходит в спящий режим).

Я написал простой скрипт, чтобы проверить, запущен ли процесс и записывает его в файл журнала, но сегодня утром я должен был заметить, что этот скрипт тоже не работал (всего около двух часов он регистрирует состояние сервера каждые 15 секунд, а последнее состояние - работает).

Вот сценарий:

#!/bin/sh                                  

MATCH="SOME_PROCESS_NAME"                         

while [ true ]                                 
do                                    
    if [ "$(ps -ef | grep ${MATCH} | grep -v grep)" ]; then                      
    echo "$(date): Process is running ..."                          
    else                                   
    echo "$(date): Process has ended ..."                                                      
    fi                                   

    sleep 15                                  
done 

Есть ли способ, чтобы отслеживать процесс после того, как я начал это, чтобы проверить завтра утром, что убило мой процесс и почему он закончился (сценарий, очевидно, не Работа)?

Сам сервер выглядит довольно простым, и я не думаю, что есть какое-то автоматическое выключение, которое я пропустил. Вот код, который я использовал.

var express = require('express'); 
var path = require('path'); 

var server = express(); 
server.use(express.static(path.join(__dirname, 'public'))); 

server.listen(1337); 
console.log("Server listening (PORT: " + 1337 + ") ..."); 

Любая идея, что делать, чтобы сервер работал/узнал, что является причиной остановки?

ОБНОВЛЕНИЕ: Я получил рабочий ответ по адресу RaspberryPi -stackexchange.

+0

Как вы начинаете эти процессы в Начать с? Похоже, что они могут быть убиты ['SIGHUP'] (https://en.wikipedia.org/wiki/SIGHUP). – robertklep

+0

@robertklep Да, я получил аналогичный ответ на [RaspberryPi.stackexchange] (http://raspberrypi.stackexchange.com/questions/47139/http-server-stops-after-some-time?noredirect1_comment70299_47139) и я тестирую его прямо сейчас :) – LastSecondsToLive

ответ

0

Мое предположение, что малина Pi перезапускается в полночь или что-то подобное. чтобы исправить это, возможно, добавьте запись для вашего файла процесса rc.local сервера. вы можете добавлять команды в файл rc.local путем редактирования /etc/rc.local

+0

Зачем перезагрузка RPi в полночь? – LastSecondsToLive

+0

@LastSecondsToLive Я не знаю. Это может быть приурочено к экономии энергии, это также может быть просто синхронизация системы, я не знаю. Возможно, создайте скрипт для записи времени в файл каждую минуту, затем он автоматически остановится, когда он выключится. – RhysO

0

Будет ли это полезно https://raspberrypi.stackexchange.com/questions/8741/when-does-the-os-kill-an-application?

Я хотел бы предложить другой подход для мониторинга процесса, пока вы можете получить более подробную информацию, отредактировать, а затем проверить, а затем начать (писал на лету)

var fs = require('fs') 
var spawn = require('child_process'); 

var child = spawn(process.argv[0], 'your/bin.js', {stdio:['ignore', 'pipe', 'pipe']}) 

child.stdout.pipe(fs.createReadStream('stdout.log')) 
child.stderr.pipe(fs.createReadStream('stderr.log')) 
child.on('error', function (err) { 
    fs.writeFile('error.log', JSON.stringify(err), function() { /* void */ }) 
}) 
child.on('close', function (code, signal) { 
    fs.writeFile('exit.log', "code="+code+" signal="+signal, function() { /* void */ }) 
}) 
Смежные вопросы