我在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
任何人都知道可能导致此问题的原因或如何修复我的脚本?
答案 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”以及完全没有期望。在所有情况下,工作都会过快地重新生成并最终停止。