2016-05-10 77 views
1

信息:我指的是this问题我问超级用户,但无法得到答案,我认为这是一个很好的问题,因为问题可能与代码有关。HTTP服务器在一段时间后停止(Node.js)

我目前正在RaspberryPi上运行一个简单的Node.JS服务器,其上安装了Debian上的express.js。一切工作正常,但每天早上我醒来看到我的服务器不再运行(服务器进程我开始与命令node main.js)。

我的第一个猜测是,Pi有一些睡眠模式,它在几个小时后没有流量/ etc并进入关闭服务器的状态后进入睡眠模式,但我也运行了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?noredirect=1#comment70299_47139)我正在测试它:) – LastSecondsToLive

回答

0

我的猜测是Raspberry Pi在午夜或类似的情况下重新启动。要解决这个问题,可能会为你的服务器进程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命令添加到rc.local文件中?

我想提出一个不同的方法来监视你的过程,直到你可以得到更多的信息,进行编辑,然后检查,然后开始

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 */ }) 
}) 
相关问题