def _run_admin_script_in_background(self, action): if not os.path.exists(self.config.gearman_admin_script): raise UserError(errors[ERR_NO_GEARMAN_SCRIPT], msg_args={"file": self.config.gearman_admin_script}) prog_and_args = [self.config.gearman_admin_script, action] try: iuprocess.run_server( prog_and_args, {}, os.path.join(self.config.log_dir, "gearman_%s.log" % action), logger ) except iuprocess.ServerStartupError, e: logger.exception("Gearman startup failed: %s" % e) raise UserError( errors[ERR_GEARMAN_SCRIPT_FAILED], msg_args={"action": action}, developer_msg="script %s (run in background), error was %s" % (self.config.gearman_admin_script, e), )
def test_run_server(): """Tests of run_server(), check_server_status, and stop_server_process() """ logger.debug("test_run_server() Starting") if server_log_dir: td = server_log_dir if not os.path.exists(server_log_dir): os.makedirs(server_log_dir) else: td = tempfile.mkdtemp(prefix="test_run_server") try: pidfile = os.path.join(td, "server.pid") logger.debug("pidfile=%s" % pidfile) cwd = os.path.abspath(os.path.dirname(__file__)) process.run_server([sys.executable, os.path.abspath(__file__), "--run-server"], {}, os.path.join(td, "server.log"), logger, pidfile, cwd=cwd) found = False for i in range(5): pid = process.check_server_status(pidfile, logger, "test") if pid!=None: logger.info("Verified that server started. Pid is %d" % pid) found = True break else: time.sleep(5) _assert(found, "Test server processs not found after 25 seconds") process.stop_server_process(pidfile, logger, "test") found = True for i in range(5): pid = process.check_server_status(pidfile, logger, "test") if pid==None: logger.info("Verified that server stopped") found = False break else: time.sleep(5) _assert(not found, "Test server processs not stopped after 25 seconds") finally: if not server_log_dir: shutil.rmtree(td) logger.debug("test_run_server() Successful")
def run_admin_command_as_background_task(self, command, arglist, logfile, pidfile, cwd=None): """Start an admin command as an ongoing background task """ prog_and_args = [self.django_admin_py, command] + arglist if not cwd: cwd = self.settings_file_directory try: iuprocess.run_server(prog_and_args, self.get_django_env_vars(), logfile, logger, pidfile_name=pidfile, cwd=cwd) except iuprocess.ServerStartupError, e: logger.exception("Error in startup of django admin command %s: %s" % (command, e)) raise UserError(errors[ERR_DJANGO_BACKGROUND_ADMIN_CMD_FAILED], msg_args={"cmd":' '.join([command]+arglist)}, developer_msg="error was %s, PYTHONPATH was %s, DJANGO_SETTINGS_MODULE was %s, current working directory was %s" % (e, self.get_python_path_director(), self.deployed_settings_module, cwd))