Run node.js from upstart (ubuntu 12.04)

node.jsubuntu-12.04upstart

I'm trying to setup upstart script to start/stop my node.js application.

Here is my upstart script:

#!upstart

description "node.js server"
author "marduk"

start on filesystem
stop on runlevel [!2345]
oom never
expect daemon
respawn
respawn limit 10 60

script
        export HOME="/home/domains/srg-internal-dev"

        echo $$ > /var/run/node-srg-internal-dev.pid
        exec sudo -u www-data /usr/bin/node /home/domains/srg-internal-dev/api/server.js >> /home/domains/srg-internal-dev/node.log
2>&1
end script

pre-start script
        echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /home/domains/srg-internal-dev/node.log
end script

pre-stop script
        rm /var/run/node-srg-internal-dev.pid
        echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /home/domains/srg-internal-dev/node.log
end script

I checked this script file:

$ init-checkconf /etc/init.d/nodesrg.conf

File /etc/init.d/nodesrg.conf: syntax ok

But when I try to start node I get:

$ start nodesrg
start: Unknown job: nodesrg

What I'm doing wrong? 😉

Best Answer

Try moving nodesrg.conf to /etc/init, not /etc/init.d. Init.d is where the SYSV-style scripts go, upstart configuration belongs in the former.

Use initctl list to verify that it is showing up as an upstart service after you have moved the file.

If it doesn't, you can use initctl reload-configuration and try again.