【问题标题】:Upstart script for nodejs daemon in CentOS doesn't work (crashes on start)CentOS 中 nodejs 守护程序的 Upstart 脚本不起作用(启动时崩溃)
【发布时间】:2012-09-26 21:34:02
【问题描述】:

我的 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软件之后。

如果我在命令行输入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

有人知道是什么原因造成的,或者如何修复我的脚本吗?

【问题讨论】:

    标签: node.js centos daemon upstart


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我在 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”以及根本没有任何期望。在所有情况下,作业的重生速度都过快,最终会停止。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 2017-02-27
        相关资源
        最近更新 更多