def start_server(): global server_pid, server_did_not_start # There's a PID if the spawning worked assert server_pid is None # Can only tell if the server starts by doing a request # If the request failed, don't try to restart. if server_did_not_start: raise AssertionError("Already tried once to start the server") port = python_support.find_unused_port() create_server_dir(port) args = ['akara', "--config-file", config_filename, "start"] try: result = subprocess.call(args) except: print "Failed to start", args raise # Akara started, but it might have failed during startup. # Report errors by reading the error log if result != 0: f = open(os.path.join(config_root, "logs", "error.log")) err_text = f.read() raise AssertionError("Could not start %r:\n%s" % (args, err_text)) # Akara server started in the background. The main # process will only exit with a success (0) if the # pid file has been created. f = open(os.path.join(config_root, "logs", "akara.pid")) line = f.readline() f.close() # Save the pid information now so the server will be shut down # if there are any problems. temp_server_pid = int(line) # Check to see that the server process really exists. # (Is this overkill? Is this portable for Windows?) os.kill(temp_server_pid, 0) # Did Akara really start? server_did_not_start = True check_that_server_is_available(port) server_did_not_start = False # Looks like it's legit! server_pid = temp_server_pid return port