将node.js + expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

时间:2011-08-11 08:11:36

标签: linux node.js daemon express

我让守护进程按照这些说明正常工作: http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/

但是因为这会在开发模式下启动应用程序,所以日志文件会被socket.io调试日志发送垃圾邮件。

我尝试在upstart-conf文件中将NODE_ENV设置为production,但没有成功。

script
    export HOME="/root"
    export NODE_ENV=production

    exec /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1
end script

没用。

5 个答案:

答案 0 :(得分:27)

尝试

exec NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1

在我的设置中,我是一个较小的用户,所以它是

exec sudo -u some-user NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1

由于它正在产生另一个用户,它可能还有另一个环境。我在这里是新手,但它对我有用。

答案 1 :(得分:18)

这是一个可以使用的更简单的upstart脚本。 Upstart现在支持您在没有脚本部分或太多嵌入式shell语法的情况下直接执行的所有操作。这包括环境变量(env),工作目录(chdir),用户/组(setuidsetgid),日志处理(console log)等。您的日志文件将被处理并轮换到/var/log/upstart/your_app.log

description "start and stop the example express.js/node.js server"
author "John Doe <jd@example.com>"

start on filesystem and started networking
respawn
console log
chdir /opt/your_app
setuid your_app_user
setgid your_app_user
env PATH=./node_modules/.bin:./node/bin:/usr/bin
env NODE_ENV=production
exec app/server.js

答案 2 :(得分:15)

如果您在生产中使用node.js,我建议您使用forever.js来守护您的程序 https://github.com/nodejitsu/forever

使用npm安装:[sudo] npm install forever -g

export NODE_ENV=production并运行forever start app.js您还可以指定放置错误和标准日志的位置。

答案 3 :(得分:4)

在heroku使用中设置NODE_ENV:

heroku config:set NODE_ENV="production"

答案 4 :(得分:2)

Ubuntu / Upstart列在问题中,但我在寻找FreeBSD /系统shell守护进程的答案时到了这里。

以下一行在&#34;开发&#34;环境:

exec node path/to/start/script.js

以下一行在&#34;生产&#34;环境:

NODE_ENV=production exec node path/to/start/script.js

我花了一段时间来弄清楚这一点,所以我想我会分享。