信息: 我指的是我在超级用户上提出的this问题,但无法得到答案,我觉得这很好请问,因为问题可能与代码有关。
我目前在我的RaspberryPi上运行了一个带有express.js的简单Node.JS服务器,并在其上安装了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 :(得分:0)
我的猜测是Raspberry Pi在午夜重启或类似的东西。修复此问题可能会为您的服务器进程rc.local文件添加一个条目。您可以通过编辑/etc/rc.local
答案 1 :(得分: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 */ })
})