我无法启动 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 artcile由 Jeff Dickey在 Node.js 上使用 systemd这比我们在这里所做的所有事情(恕我直言)更清洁、更容易。他还使用 Ansible 来控制他的集群(我喜欢这个),但如果你还没有准备好,你不必走那么远。
关于node.js - node.js 应用程序的 Upstart 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13982257/