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.