如何动态的创建进程或php强制restart所有程序呢? 搞了一天搞吐了, 用worker_start创建的进程状态跑不起来, 通过删除主进程posix_kill(posix_getppid(), SIGUSR1); 重启也不行(通过读DB动态生成的process 不会重新启动), 通过自己写个sh,php里面执行shell 重启整个服务也不行, 裂开了
worker_start
posix_kill(posix_getppid(), SIGUSR1);
process
shell
目前我通过这个方法,实现增减进程。 https://www.workerman.net/q/11025 用模型事件:
我的业务场景是实时量化交易,每个进程代表一个客户的账户。 通过上述方法,在增加账户时重启webman,达到启动进程的目的。
./config/process.php关键代码:
$okx_process_file = __DIR__ . '/okx_process.php'; if (is_file($okx_process_file)) { $okx_process = include $okx_process_file; return $config + $okx_process; } else { return $config; }
利用模型的后置事件,动态的增减okx_process.php
/** * 生成启动进程时的配置 * @return void */ public static function buildStartProcessConfig(): void { $tpl = <<<EOF <?php use process\AsyncOrder; return [ PROCESS_CONFIG_CONTENT ]; EOF; $process = <<<EOF 'PROCESS_NAME' => [ 'handler' => AsyncOrder::class, 'constructor' => [ 'config' => 'PROCESS_NAME', ], ], EOF; $content = ''; $list = static::where('start_process', '=', 1)->select(); if ($list->exists()) { $list->each(function (self $model, $key) use (&$content, $process) { $content .= str_replace('PROCESS_NAME', $model->title, $process) . PHP_EOL; }); } $config = str_replace('PROCESS_CONFIG_CONTENT', $content, $tpl); if (!file_put_contents(config_path('okx_process.php'), $config)) { throw new RuntimeException('写进程配置失败'); } }
感谢大佬的回复, 我这边已经采用了\posix_kill(posix_getppid(), SIGINT); 指令来停止主进程, 然后通过supervisord来重启进程已实现业务模式~
\posix_kill(posix_getppid(), SIGINT);
supervisord 只能debug模式吧?daemon会报错
mark一下
目前我通过这个方法,实现增减进程。
https://www.workerman.net/q/11025
用模型事件:
我的业务场景是实时量化交易,每个进程代表一个客户的账户。
通过上述方法,在增加账户时重启webman,达到启动进程的目的。
./config/process.php关键代码:
利用模型的后置事件,动态的增减okx_process.php
感谢大佬的回复, 我这边已经采用了
\posix_kill(posix_getppid(), SIGINT);
指令来停止主进程, 然后通过supervisord来重启进程已实现业务模式~supervisord 只能debug模式吧?daemon会报错
mark一下