如何動態(tài)的創(chuàng)建進程或php強制restart所有程序呢? 搞了一天搞吐了, 用worker_start
創(chuàng)建的進程狀態(tài)跑不起來, 通過刪除主進程posix_kill(posix_getppid(), SIGUSR1);
重啟也不行(通過讀DB動態(tài)生成的process
不會重新啟動), 通過自己寫個sh,php里面執(zhí)行shell
重啟整個服務(wù)也不行, 裂開了
目前我通過這個方法,實現(xiàn)增減進程。
http://www.wtbis.cn/q/11025
用模型事件:
我的業(yè)務(wù)場景是實時量化交易,每個進程代表一個客戶的賬戶。
通過上述方法,在增加賬戶時重啟webman,達到啟動進程的目的。
./config/process.php關(guān)鍵代碼:
$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;
}
利用模型的后置事件,動態(tài)的增減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('寫進程配置失敗');
}
}