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 tryexpect 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.