/** * 添加或替换 * @param $params * @return array */ function addworker_cron($params) { $workers = isset($params["post"]["workers"]) ? $params["post"]["workers"] : ""; $workers = json_decode($workers, true); if (empty($workers)) { return $this->output("参数有误", false); } foreach ($workers as $id => $worker) { if (empty($worker["name"]) || empty($worker["processNum"]) || empty($worker["parse"]) || empty($worker["task"])) { return $this->output("参数有误", false); } } Squire_LoadConfig::send_config($workers); $config = Squire_LoadConfig::parse_config($workers); Squire_Master::reload($config); return $this->output("ok"); }
/** * 注册信号 */ private static function register_signal() { //注册子进程退出信号逻辑 swoole_process::signal(SIGCHLD, function ($signo) { while (($pid = pcntl_wait($status, WNOHANG)) > 0) { Main::log_write("收到子进程{$pid}退出信号"); if (!isset(Squire_Master::$workers[$pid]["logout"])) { $task = Squire_Master::$workers[$pid]["task"]; Squire_Master::create_child_process($task, Squire_Master::$task_list[$task]); } unset(Squire_Master::$workers[$pid]); } }); //注册主进程退出逻辑 swoole_process::signal(SIGTERM, function ($signo) { Main::log_write("收到主进程退出信号, 发送子进程退出信号:" . $signo); foreach (Squire_Master::$workers as $pid => $process) { Squire_Master::$workers[$pid]["logout"] = true; swoole_process::kill($pid, SIGUSR2); } if (!empty(Main::$http_server)) { swoole_process::kill(Main::$http_server->pid, SIGKILL); } Main::log_write("已发送子进程退出信号,主进程正在退出....."); swoole_timer_add(501, function () { if (count(Squire_Master::$workers) == 0) { Squire_Master::exit2p("主进程退出成功"); } }); }); //注册重新载入配置信号 swoole_process::signal(SIGUSR1, function ($signo) { Main::log_write("收到重新载入配置信号:" . $signo); Squire_Master::reload(); }); }