我有一个开始麻烦新贵脚本。
这里的脚本(在/ etc /初始化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
,我得到:
开始:未知作业:应用
我怎样才能使这项工作?
我在上这是红帽基于最新的亚马逊(AWS)Linux上运行同样的问题。
我有我的暴发户文件/etc/init
称为node.conf
,当我跑sudo start node
到你,我会得到一个类似的错误start: Unknown job: node
。
事实证明,如果有你的一个错误的作业不会启动.conf
文件。 于是我开始了通过注释掉的所有行,慢慢建立以查找错误。 该错误消息不是很清楚,并使它看起来像暴发户找不到你的conf文件。
泰陵你“的/ var / log / messages中”将帮助您调试的新贵日志存在(这可能是在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年6月1日 -
如果你在CentOS或亚马逊的Linux和我一样,看看这个的init.d脚本 。
- 编辑二〇一三年十月十四日 -
这里的一个要点链接 ,我在生产环节上的Linux亚马逊(基于红帽)实际使用的init.d脚本。 我只是把它在我的下一个项目init.d
文件夹,然后符号链接到它在/etc/init.d
的文件夹,现在是一个守护程序/服务!
- 编辑2014年6月5日 -
看看这个真棒博客artcile由杰夫·迪基上的Node.js在生产中使用systemd这是比所有的东西更清洁和更容易,我们一直在这里做(恕我直言) 他还使用Ansible控制自己的集群(我的爱),但你没有,如果你还没有准备好去那么远。
尝试几次后,我实现工作暴发户.conf文件,其工作原理与崩溃的情况下重新启动,重新启动(重生)之后自动启动的服务。 此外,它可以与非特权用户权限启动我的应用程序。 该文件的名称是/etc/init/my-app.conf。
启动/停止服务,请使用
sudo start my-app / sudo stop my-app
如果你有这样一个错误
start: Unknown job: my-app
执行的是以下命令
sudo initctl reload-configuration
我/etc/init/my-app.conf文件:
#my-app
description "node.js my-app website"
env FULL_PATH="/home/myuser/app.prod/app"
env NODE_PATH="/usr/bin/node"
start on filesystem or runlevel [2345]
stop on [!2345]
script
export HOME="/root"
export NODE_ENV=production
echo $$ > /var/run/my-app.pid
cd $FULL_PATH
#Use exec below if you want to launch it under myuser,
#don't forget to create /var/log/my-app.sys.log with appropriate permissions
#exec sudo -u myuser sh -c "$NODE_PATH server.js >> /var/log/my-app.sys.log 2>&1"
exec $NODE_PATH server.js >> /var/log/my-app.sys.log 2>&1
end script
pre-start script
echo "[`date`] (sys) Starting" >> /var/log/my-app.sys.log
end script
pre-stop script
rm /var/run/my-app.pid
echo "[`date`] (sys) Stopping" >> /var/log/my-app.sys.log
end script
#uncomment respawn if you want to restart your service in case of crash
#respawn
#respawn limit 50 30
我建议取消注释重生,你会确保一切工作正常后。
UPDATE
我提高了我的脚本(请记住,它的工作原理不是在根但在普通用户ZN):
#znapi.conf
description "node.js zn api"
env FULL_PATH="/home/zn/app.prod"
env NODE_PATH="/usr/bin/node"
env LOG="/var/log/znapi.log"
env PIDFILE="/var/run/znapi.pid"
# Start up when the system hits any normal runlevel, and
#start on filesystem or runlevel [2345]
#start when mongod started
start on started mongod
# shuts down when the system goes to shutdown or reboot.
stop on runlevel [06]
respawn
respawn limit 50 5
pre-start script
# check that log file exist or create it
test -f $LOG || { touch $LOG; chown zn:zn $LOG; }
# Date format same as (new Date()).toISOString() for consistency
echo "[`date`] (sys) Starting" >> $LOG
end script
script
export NODE_ENV=production
exec start-stop-daemon --start -m -p $PIDFILE -c zn -d $FULL_PATH -x server.js >> $LOG 2>&1
end script
pre-stop script
rm $PIDFILE
echo "[`date`] (sys) Stopping" >> $LOG
end script