2016-05-10 80 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 */ }) 
}) 
相關問題