node.js - node.js 应用程序的 Upstart 脚本

标签 node.js ubuntu upstart

我无法启动 Upstart脚本。

这是脚本(/etc/init/中的 app.conf)

description "node.js server"
author      "kvz"

start on startup
stop on shutdown

script
   # We found $HOME is needed. Without it, we ran into problems
   export HOME="/root"

   exec sudo -u /usr/local/bin/node \
                /var/www/vhosts/travelseguro.com/node/app.js \
                2>&1 >> /var/log/node.log
end script

当我运行 sudo start app 时,我得到:

start: Unknown job: app

我怎样才能做到这一点?

最佳答案

我在基于 Redhat 的最新 Amazon (AWS) linux 上运行时遇到了同样的问题。

我有我的 upstart /etc/init 中名为 node.conf 的文件,当我运行 sudo start node 时,我会收到类似的错误 start : 未知作业: Node .

事实证明,如果您的 .conf 文件中有错误,作业将无法启动。所以我开始注释掉所有的行,然后慢慢建立起来找到错误。 错误信息不是很清楚,看起来像 upstart 找不到你的 conf 文件。

跟踪您的“/var/log/messages”将帮助您将 Upstart 日志调试到那里(它可能在 Ubuntu 上有所不同。我说 init:/etc/init/node-upstart.conf:8 : Unknown stanza 帮助我深入了解它。在我的特殊情况下,我错误地声明了变量。

参见 AskUbuntu对于类似的线程。

这是我的编辑工作脚本:

<!-- language: lang-sh -->
#!upstart
# using upstart http://upstart.ubuntu.com/getting-started.html and node forever  https://github.com/nodejitsu/forever/  
# to run server
# redhat has additional sudo restrictions, you must comment out 'Default requiretty' from /etc/sudoers
#startup monitoring script derived from http://stackoverflow.com/questions/11084279/node-js-setup-for-easy-deployment-and-updating

description "node.js server"
author      "jujhar"
env PROGRAM_NAME="node"
env FULL_PATH="/home/httpd/buto-middleman/public"
env FILE_NAME="forever.js"
env NODE_PATH="/usr/local/bin/node"
env USERNAME="springloops"

start on startup
stop on shutdown

script
    export HOME="/root"  
    export NODE_ENV=staging #development/staging/production

    echo $$ > /var/run/$PROGRAM_NAME.pid
    cd $FULL_PATH        
    #exec sudo -u $USERNAME $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1
    exec $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1
end script

pre-start script
    # Date format same as (new Date()).toISOString() for consistency
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/$PROGRAM_NAME.sys.log
end script

pre-stop script
    rm /var/run/$PROGRAM_NAME.pid
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/$PROGRAM_NAME.sys.log
end script

-- 编辑 2013-06-01 --

如果您像我一样使用 Centos 或 Amazon Linux,请查看 init.d script .

-- 编辑 2013-10-14 --

这是 link to a gist我在 Amazon Linux(基于 Redhat)上实际使用的 init.d 脚本。我只是将它保存在我的项目中的 init.d 文件夹下,然后在 /etc/init.d 文件夹中符号链接(symbolic link)到它,现在它是一个守护进程/服务!

-- 编辑 2014-06-05 --

看看这个很棒的blog artcileJeff Dickey在 Node.js 上使用 systemd这比我们在这里所做的所有事情(恕我直言)更清洁、更容易。他还使用 Ansible 来控制他的集群(我喜欢这个),但如果你还没有准备好,你不必走那么远。

关于node.js - node.js 应用程序的 Upstart 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13982257/

相关文章:

node.js - 如何在 Travis 上使用 sudo 运行 mocha

node.js - 使用 Windows Azure Powershell 设置唯一的部署名称

mysql - 使用 sequelize 等待查询

ubuntu - 加载共享库时出错 : libhdf5. so.101:无法打开共享对象文件

java - 在系统启动时在 Ubuntu 上运行 Jar 文件

node.js - 如何读取 Azure Blob URL?

linux - 从 GitHub : support/node-builds-v4/node-linux64: Permission denied 安装 Cloud9 时出现问题

c - 无法创建链接静态库的可执行文件

logging - Socket.io 启动输出杀死 node.js 守护进程的 Upstart 脚本

python - 将 Python 脚本作为 upstart 服务运行显示不同的时间输出