我们在Ubuntu(13.10)服务器上有一系列node.js
脚本,我们希望尽可能地保持运行,并在服务器重启时自动重启。我们尝试了一些不同的技术,但尚未找到有效的解决方案。
设置:没有脚本在端口80上运行,而是在8000以上的端口上运行。
Node.js
个文件目前正在/usr/lib/sites/path/Node
我们已经使用Forever单独设置并运行,同时在具有良好特权(但不是root用户)的用户的上下文中运行,只需在包含脚本的文件夹的上下文中运行以下内容:
forever start server_process.js
我们希望在服务器启动时运行这些脚本,并且稍后(如果需要)有一些能力来重新启动它们。
Upstart听起来应该是解决方案,但我们还没有设法让它发挥作用。以下脚本启动,然后停止而不指示原因...
description "Our app"
version "1.0"
author "Nautilytics"
start on startup
stop on shutdown
expect fork
env FOREVER_PATH=/usr/bin/forever
env APPLICATION_DIRECTORY=/usr/lib/sites/path/Node
env APPLICATION_START=ourapp.js
env LOG_PATH=/var/log/ourapp.log
chdir /usr/lib/sites/path/Node
script
exec $FOREVER_PATH start --sourceDir $APPLICATION_DIRECTORY -f -v $APPLICATION_START >> $LOG_PATH 2&>1
end script
通过直接的反复试验,我们曾多次遇到错误,指出无法找到其他文件(ourapp.js
所需),就像chdir
无法正常工作一样或者通过永远的开始。
答案 0 :(得分:4)
在搜索互联网寻求解决方案之后,我们决定坚持使用nodejs而不是永远用于此任务。它更容易,并且通过重生它可以完成我们需要永远为我们做的一切。
start on runlevel [2345]
stop on shutdown
respawn
script
exec sudo nodejs /usr/lib/sites/path/Node/ourapp.js 2>&1 >> /var/log/ourapp.log
end script
答案 1 :(得分:1)
更安全的upstart配置脚本可能是(hardened-nodejs.conf):
description "Managing and monitoring nodejs application"
# start when filesystem is mounted networking is up
start on (filesystem and net-device-up IFACE!=lo)
# stop on shutting down the system
stop on runlevel [016]
# application environment
# staging and development instances should use hardened-nodejs.override to define environment
env NODE_ENV=production
# respawn the job up to 10 times within a 5 second period.
# If the job exceeds these values, it will be stopped and marked as failed.
respawn
respawn limit 10 5
# ssl-cert group can read certificates
setuid www-data
setgid ssl-cert
exec /usr/bin/nodejs /usr/lib/sites/path/Node/ourapp.js 2>&1 >> /var/log/ourapp.log
在低端口上运行nodejs应用程序监听的解决方案之一可能是使用capabilities tools。
如果通过SSL用户或组提供服务,则必须具有对证书的读取权限。查看ssl-cert package和this answer了解基本概念。
答案 2 :(得分:0)
你检查过process.cwd()吗?可能是您的流程正在其他地方运行。