Why is this simple upstart failing?

August 4, 2015 3.3k views
Node.js

I have a number of these simple upstart scripts that work fine on other droplets. This is a new droplet and /var/log/upstart/acc.log is filled with
/proc/self/fd/9: 4: /proc/self/fd/9:  : not found

I can run the script 'by hand' and my app comes up just fine.
The script is just

start on startup
respawn
script
    cd /opt/acc
    export PORT=4321
    export ROOT_URL='the ip here'
    node main.js
end script

I've tried adding export PATH and NODE_PATH .. same error in the log.

This is a new droplet, but as I said I can run this 'by hand' and its fine.

Ideas as to what is wrong or what I can do to find out what is really 'not found'?

P:)

2 Answers

Upstart uses /bin/sh while running 'by hand' will use bash.

Try this:

start on startup
respawn
script
/bin/bash <<EOT
    cd /opt/acc
    export PORT=4321
    export ROOT_URL='the ip here'
    node main.js
EOT
end script

Source: http://upstart.ubuntu.com/cookbook/#changing-the-default-shell

  • This solution worked for me when i had to source a file inside upstartd script and the default shell was interpreting the file name as a function name and gave the error,

    script
      . /home/sk/.env-rc
    end script
    

    throws error as,

    /proc/self/fd/9: 37: /home/sk/.env-rc: function: not found

    I fixed this error by using bash shell as suggested above,,, thanks...

thanks for the response.
The problem here is/was multiple version of node as well as multiple names 'node' vs 'nodejs'. Ubuntu is a mess.
upstart couldn't find the node app.
After many hours of trashing around with
apt-get --purge remove node
and installs. I finally got the single version of node required for this project (Meteor).

Have another answer? Share your knowledge.