Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am trying to write a startup script that executes an application (MapProxy) after a server reboot. My server runs Ubuntu 11.04 Natty 64 bit.

In the script, I execute a python script exec python /$path/"" & which successfully creates a fcgi.socket that the web server can communicate with. However, I need to make fcgi.socket writeable or MapProxy will not work i.e. I need to action a chmod on it.

It seems that after I action the, I lose control within the startup script - it does not go on to make the fcgi.socket writable. Any ideas?

#! /bin/bash
exec python /$path/"" &
exec chmod o+w /$path/"fcgi.socket" &
exit 0
share|improve this question
On Ubuntu, you may want to look at stop-start-daemon to deal with your Python script, probably with the -b option. – cjc May 29 '12 at 16:44

New script:

#! /bin/bash
python /$path/"" &&
chmod o+w /$path/"fcgi.socket"

& sends a process to the background and executes the next process immediately. && waits for the return value of the last process and if it is zero then the next process is started.

Removing your exit 0 is so that you'll get the error code of whatever process executed last in the script. It should be zero, but this way it will propagate if you have an error.

share|improve this answer
Thanks for the replies but I'm afraid that doesn't work for me. "python" is something that I would run manually and it stays "in process" until I type crtl-c. That's why I add & to defer it to the background and follow up by chmod but as you say, it actions too soon. I tried using "sleep 5" but still get the same fcgi.socket created but permissions unchanged. – Jason May 29 '12 at 16:22
Actually, I doubled the sleep time and it now works :- python /$path/"" & sleep 10 chmod o+w /$path/"fcgi.socket" Is there a better solution? I guess the should send a signal to the host script in some way... – Jason May 29 '12 at 16:40
@Jason is your program meant to run as a daemon? Perhaps ideally you would edit to do this task? – Jeff Ferland May 29 '12 at 16:48
Hi Jeff, it runs up a FastCGI server (as described here : – Jason May 29 '12 at 16:53

Remove the execs and & symbols. That defers processing to the background so that the next command can run immediately. In effect you are changing the permissions on a file that doesn't exist yet, since it takes some time for your first command to run and create the socket.

share|improve this answer
Did you miss exec? – Oliver May 29 '12 at 15:59

The important bit you seem to be missing is what the exec part is doing. From bash's help exec: "Replace the shell with the given command.". When you say exec python /$path/"" your script essentially says "I'm done here, let's let python take it from here, execute this python script, and whatever it returns is what I return". So nothing later in the script will execute. It doesn't make sense to use exit unless it is the last thing your script does.

You have "exit 0" at the end of this script which says "my script should terminate as if everything succeeded, no matter what else might have failed". if that is really what you want, then you don't want to use exec, since your scripts exit code will be the exit code of whatever process you exec. Instead you might want to return an actual failure result from python or chmod if you get one.

share|improve this answer

Your Answer


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.