CentOS中nodejs守护进程的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 

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

在命令行中,如果我inputstart shortnr我会沿着shortnr start/running, process 28350得到一些shortnr start/running, process 28350

但是,我似乎无法访问nodejs服务器; 如果我做ps aux | grep shortnr ps aux | grep shortnr在命令shell下,没有任何东西出现。

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

我在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

任何人有任何想法是什么可能导致这个或如何解决我的脚本?

虽然我不知道我的问题的答案,我只是结束了永远使用: https : //github.com/nodejitsu/forever-monitor

我也在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”以及没有任何期望。 在所有情况下,这项工作太快重新进行,最终停止。