Ejemplo n.º 1
0
 /**
  * 添加或替换
  * @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");
 }
Ejemplo n.º 2
0
 /**
  * 注册信号
  */
 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();
     });
 }