Ubuntu Upstart script hangs on start and stop

I have an upstart script that will start a custom jetty server. When I do sudo start [myservice] nothing happens. Subsequently, sudo status [myservice] show it as: [myservice] start/killed, process 3586.

Here's the script in /etc/init/[myservice].conf:

description "[description]"
author "[my name and email]"
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
    sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1
end-script

And here is grafserv-start.sh:

#!/bin/bash
/usr/bin/java -Djetty.port=3070 -jar /path/to/grafserv/trunk/start.jar
echo "Done starting GrafServ"

I've tried redirecting the output of the script command to a tmp logfile, but that file is never created. When I start it, I just get a hang, until I ^C. Also, I tried running it with strace but that gave me a lot of stuff about sockets.


Solution 1:

sudo -u www-data

...will hang if it prompts for password. Have you've checked that the user the "startup script" runs as has sudoers permissions to do that?

Solution 2:

I think there are three possible issues:

  • Your expect fork is wrong because your program doesn't actually fork. This is probably not the case since you are using a script but you might want to try expect daemon or not expect at all.

  • Your java program doesn't actually go into daemon mode and thus requires to be put in the background. In other words you need a & at the end: sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1&

  • Your Upstart is in a bad state. I don't know exactly how it happens but you can get upstart in a state where even if you edit the script to be correct it will still hang. If this happens rename the file (ie /etc/init/[myservice]-1.conf and try starting it till stops hanging. Once you get the script right rename the file to the correct name and restart the system.