node.js rest服务器在崩溃后没有重启(upstart)

时间:2015-04-24 19:26:09

标签: node.js unix express init upstart

我有 node.js休息服务器,我希望将其作为守护程序运行,使其在崩溃时重新生成

我对unix的了解非常有限,所以我尝试了几个我在Google上找到的示例脚本。下面的那个似乎工作,除了它没有重新生成应用程序,当它崩溃并且大多数时间没有记录实际错误

你能告诉我它有什么问题吗?

#my-app                                                                           
description "node.js my-app"                                                  
env FULL_PATH="/home/ec2-user/rest-api"                                              
env NODE_PATH="/usr/local/bin/node"                                                     


start on filesystem or runlevel [2345]                                            
stop on [!2345]                                                                   

script                                                                            
   export HOME="/ec2-user"                                                           
   export NODE_ENV=development                                                    
   echo $$ > /var/run/rest.pid                                                 
   cd $FULL_PATH 
   exec $NODE_PATH index.js >> /var/log/rest.sys.log 2>&1                     
end script                                                                        

pre-start script                                                                  
    echo "[`date`] (sys) Starting" >> /var/log/rest.sys.log                     
end script                                                                        

pre-stop script                                                                   
    rm /var/run/rest.pid                                                        
    echo "[`date`] (sys) Stopping" >> /var/log/rest.sys.log                     
end script                                                                        

respawn limit 50 30   
#respawn tried this as well with no success                                                                          

我已将此代码放入 /etc/init/rest.conf

我正在运行它:

$ sudo start rest
rest start/running, process 7734

每次运行时,数字(7734)都不同,如果这有一定的重要性。

/var/log/rest.sys.log 中的日志有关于守护程序启动的输出:

[Mon Apr 20 22:32:18 UTC 2015] (sys) Starting
Express server listening on port 3000 in development mode
[Thu Apr 23 13:26:28 UTC 2015] (sys) Starting
Express server listening on port 3000 in development mode

然而,大多数时候它停止了,崩溃本身并没有什么,但在某些情况下它确实如此。例如,当mysql服务器关闭时,node.js应用程序停止并在/var/log/rest.sys.log中记录ECONNREFUSED错误

index.js:

var config = require('./config');
var domain = require('domain');
var d = domain.create();
var server = require('./server');

d.on('error', function(err) {
  console.error(err);
});

d.run(function() {
  server.start();
});

server.js

var express = require('express')
    app = express(),
    routes = require('./routes'),
    fs = require('fs'),
    bodyParser = require('body-parser'),
    methodOverride = require('method-override'),
    errorHandler = require('errorhandler'),
    path = require("path"),
    applicationRoot = __dirname,
    router = express.Router(),
    config = require('./config')
var winston = require('winston');
require('winston-papertrail').Papertrail;
var url = require('url');

var logger = new winston.Logger({
    transports: [
        new winston.transports.Papertrail({
            host: xxx,
            port: xxx
        })
    ]
  });

var db = require('./db')

app.use(bodyParser());
app.use(methodOverride());
app.use(express.static(path.join(applicationRoot, "public")));
app.use(errorHandler({ dumpExceptions: true, showStack: true }));


app.use('development', errorHandler({ dumpExceptions: true, showStack: true }));
app.use('production', errorHandler({ dumpExceptions: true, showStack: true }));

[...]

function start() {
    var port = process.env.PORT || 3000;
    app.listen(port);
    console.log("Express server listening on port %d in %s mode", port, app.settings.env);
}
exports.start = start;
exports.app = app;

我的系统信息:

NAME="Amazon Linux AMI"
VERSION="2014.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2014.09"
PRETTY_NAME="Amazon Linux AMI 2014.09"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2014.09:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2014.09

0 个答案:

没有答案