简体   繁体   中英

setting NODE_ENV for node.js + expressjs application as a daemon under ubuntu

i got the daemon working alright with these instructions: http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/

but because this starts the application in DEVELOPMENT mode, the log file gets spammed with socket.io debug logs.

i tried setting the NODE_ENV to production in the upstart-conf-file but had no success.

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

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

didn't work.

Try

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

In my setup I'm sudoing as a lesser user, so it's

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

and since it's spawning off another user it probably has another environment. I'm a newbie here, but it works for me.

Here's a simpler upstart script you can use. Upstart now supports everything you need to do directly without script sections or too much embedded shell syntax. This includes environment variables ( env ), working directory ( chdir ), user/group ( setuid , setgid ), log handling ( console log ), etc. Your log files will be handled and rotated into /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

If you are using node.js in production, I recommend you use forever.js to daemonize your program https://github.com/nodejitsu/forever

Install using npm: [sudo] npm install forever -g

export NODE_ENV=production and run forever start app.js You can also specify where to put error and stdout logs.

to set NODE_ENV in heroku use:

heroku config:set NODE_ENV="production"

Ubuntu/Upstart are listed in the question, but I got here while looking for answers for a FreeBSD/system shell daemon.

The line below started the app in "development" environment:

exec node path/to/start/script.js

The line below started the app in "production" environment:

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

It took me a while to figure this out, so I thought I'd share.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM