From 7cfdbee843e3af38aecef578c0100d87d0cad8b0 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sun, 12 Feb 2023 19:19:32 +0800 Subject: [PATCH] fix workerman select exit fake fatal bug --- src/ZM/Event/Listener/WorkerEventListener.php | 8 ++++++-- src/ZM/Utils/CodeGenerator/PluginGenerator.php | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/ZM/Event/Listener/WorkerEventListener.php b/src/ZM/Event/Listener/WorkerEventListener.php index 7658bc32..148177b6 100644 --- a/src/ZM/Event/Listener/WorkerEventListener.php +++ b/src/ZM/Event/Listener/WorkerEventListener.php @@ -7,6 +7,7 @@ namespace ZM\Event\Listener; use OneBot\Driver\Coroutine\Adaptive; use OneBot\Driver\Coroutine\CoroutineInterface; use OneBot\Driver\Process\ProcessManager; +use OneBot\Driver\Workerman\Worker; use OneBot\Util\Singleton; use ZM\Annotation\AnnotationHandler; use ZM\Annotation\AnnotationMap; @@ -85,9 +86,9 @@ class WorkerEventListener register_shutdown_function(function () { $error = error_get_last(); // 下面这段代码的作用就是,不是错误引发的退出时照常退出即可 - if (($error['type'] ?? 0) != 0) { + if (($error['type'] ?? 0) === 1) { logger()->emergency(zm_internal_errcode('E00027') . 'Internal fatal error: ' . $error['message'] . ' at ' . $error['file'] . "({$error['line']})"); - } elseif (!isset($error['type'])) { + } else { return; } Framework::getInstance()->stop(); @@ -119,6 +120,9 @@ class WorkerEventListener public function onWorkerStart1(): void { + if (Framework::getInstance()->getDriver()->getName() === 'workerman') { + logger()->debug('Workerman 使用了事件循环:' . Worker::$eventLoopClass); + } logger()->debug('{is_task}Worker 进程 #{id} 已启动', ['is_task' => ProcessStateManager::isTaskWorker() ? 'Task' : '', 'id' => ProcessManager::getProcessId()]); } diff --git a/src/ZM/Utils/CodeGenerator/PluginGenerator.php b/src/ZM/Utils/CodeGenerator/PluginGenerator.php index 6fd34ea5..7d01cf16 100644 --- a/src/ZM/Utils/CodeGenerator/PluginGenerator.php +++ b/src/ZM/Utils/CodeGenerator/PluginGenerator.php @@ -79,7 +79,11 @@ class PluginGenerator file_put_contents(zm_dir($plugin_base_dir . '/composer.json'), json_encode($composer_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); // TODO: 寻找 PHP 运行环境和 Composer 是否在当前目录的情况 chdir($plugin_base_dir); - passthru('composer dump-autoload'); + $env = getenv('COMPOSER_EXECUTABLE'); + if ($env === false) { + $env = 'composer'; + } + passthru(PHP_BINARY . ' ' . escapeshellcmd($env) . ' dump-autoload'); chdir(WORKING_DIR); } }