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

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

Posted by: admin November 30, 2017 Leave a comment


i got the daemon working alright with these instructions:

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.

    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.



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 <[email protected]>"

start on filesystem and started networking
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

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.