Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

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.

share|improve this question
    
Just a sanity check: is there actually code in start.jar that forks to background? Otherwise, the the JVM would just block, no? –  Bittrance Mar 25 '11 at 21:03
2  
Possibly related: bugs.debian.org/cgi-bin/bugreport.cgi?bug=582745 –  Brendan Long Jul 20 '11 at 22:47
    
Related to: bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313 –  sebnow Oct 26 '11 at 2:41

3 Answers 3

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?

share|improve this answer
2  
and you can add -n to sudo so it exits with an error instead of waiting for password. –  Evgeny Oct 11 '12 at 14:58

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.

share|improve this answer

I think you missed the exec in front of your script in upstart... I think it's necessary. Try this:

exec sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1

Like Bittrance said, you might also want to make sure that your java program runs in the background. Try appending a & or something to the end of the command in your script if you don't have any logic in your java program that runs it as a background process or a daemon.

share|improve this answer
    
Choices are "exec" or "script / end script". The example uses the latter. –  danorton Jun 6 '11 at 23:23

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.