CentOS中nodejs守护程序的Upstart脚本不起作用(启动时崩溃)

时间:2012-10-05 17:23:26

标签: node.js centos daemon upstart

我在CentOS服务器的/ etc / init /目录下的.conf文件中有以下内容:

#!upstart
description "shortnr server for fmc.io"
author      "Felix Milea-Ciobanu"

start on startup
stop on shutdown

respawn
respawn limit 10 30

script
    export HOME="/root"
    exec /usr/local/bin/node /var/www/fmc.io/nodejs/app.js >> /var/www/fmc.io/logs/shortnr.upstart.log 2>&1
end script

pre-start script
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/www/fmc.io/logs/shortnr.upstart.log
end script

pre-stop script
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/www/fmc.io/logs/shortnr.upstart.log
end script

这是一个非常简单直接的新贵脚本。我在脚本启动的nodejs软件之后命名了这个服务shortnr

在命令行,如果我输入start shortnr,我会得到shortnr start/running, process 28350的内容。

但是,我似乎无法访问nodejs服务器;如果我在命令shell中执行ps aux | grep shortnr,则不会出现任何内容。

如果我在开始运行后stop shortnr,我会得到stop: Unknown instance:,这意味着原始服务从未启动过。

我在Upstart脚本中设置的日志文件如下所示:

[2012-10-05T17:00:17.174Z] (sys) Starting
[2012-10-05T17:00:17.181Z] (sys) Starting
[2012-10-05T17:00:17.190Z] (sys) Starting
[2012-10-05T17:00:17.197Z] (sys) Starting
[2012-10-05T17:00:17.204Z] (sys) Starting

基本上,当我发出启动命令时脚本试图每秒启动多次,这意味着服务必须在启动时崩溃并尝试重新生成?

但是,如果我在exec之后复制命令并将其粘贴到shell提示符中,则nodejs脚本将启动并正常运行。

这意味着我的Upstart脚本必定出错。

如果我尝试使用initctl命令启动/停止服务,我会得到相同的结果。

我正在运行CentOS 6.3和Upstart 0.6.5

任何人都知道可能导致此问题的原因或如何修复我的脚本?

2 个答案:

答案 0 :(得分:0)

虽然我无法找到问题的答案,但我最终还是永远使用了:https://github.com/nodejitsu/forever-monitor

答案 1 :(得分:0)

我也在CentOS 6.3,Upstart 0.6.5和Node.Js 0.10.5上遇到类似的问题。我专门升级了Node,所以我可以使用守护进程模块,并能够将守护进程的Node应用程序放在Upstart控件下。

这是我的/etc/init/job-worker.conf:

description "job-worker under Upstart/init control"

start on job-worker-start-event
stop on job-worker-stop-event

expect daemon

script
  #setuid myuser
  exec /root/BasicJobWorker/bin/basic-job-worker
  #sleep 5
end script

respawn
respawn limit 10 5 

这是我的基本职业工作者脚本:

\#!/usr/bin/env node

// this code is run twice
// see implementation notes below
console.log(process.pid);

// after this point, we are a daemon
require('daemon')();

// different pid because we are now forked
// original parent has exited
console.log(process.pid);

var BasicJobWorker = require('../lib/basic-job-worker.js');

new BasicJobWorker().boot();

我尝试过使用“expect fork”,“expect daemon”以及完全没有期望。在所有情况下,工作都会过快地重新生成并最终停止。