2

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

これは非常にシンプルでわかりやすいupstartスクリプトです。shortnrスクリプトが起動するnodejsソフトウェアにちなんで、このサービスに名前を付けました。

コマンドラインで入力するstart shortnrと、の行に沿って何かが表示されshortnr start/running, process 28350ます。

ただし、nodejsサーバーにアクセスできないようです。ps aux | grep shortnrコマンドシェルで実行すると、何も表示されません。

startを実行し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

基本的に、startコマンドを発行したときに、スクリプトは1秒間に複数回起動しようとしています。つまり、サービスは起動時などにクラッシュし、リスポーンしようとしていますか?

ただし、後でコマンドをコピーexecしてシェルプロンプトに貼り付けると、nodejsスクリプトが起動し、正しく実行されます。

つまり、Upstartスクリプトに何か問題があるはずです。

コマンドを使用してサービスを開始/停止しようとするとinitctl、同じ結果が得られます。

CentOS6.3とUpstart0.6.5を実行しています

何がこれを引き起こしているのか、または私のスクリプトを修正する方法を誰かが知っていますか?

4

2 に答える 2

0

私の問題に対する答えを見つけることができませんでしたが、代わりにフォーエバーを使用することになりました: https://github.com/nodejitsu/forever-monitor

于 2012-10-10T19:03:54.880 に答える
0

CentOS 6.3、Upstart 0.6.5、および Node.Js 0.10.5 でも同様の問題が発生しています。デーモン モジュールを使用して、デーモン化された Node アプリを Upstart の制御下に置くことができるように、特に Node をアップグレードしました。

これが私の /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 

そして、これが私のbasic-job-workerスクリプトです:

\#!/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」を使用してみましたが、まったく期待していません。いずれの場合も、ジョブの再生成が速すぎて、最終的に停止します。

于 2013-05-09T16:09:14.180 に答える