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