mysql断线后定时任务报错: getBitwiseOperators() on null

孤独剑客

webman 定时任务 mysql断线后,几分钟后,虽然mysql恢复了。 但是提示 Call to a member function getBitwiseOperators() on null。我必须要重启才行,否则一直提示这个报错。

截图
截图截图

测试复现的代码:

class Test
{

    /**
     * 进程启动时执行
     *
     * @param Worker $worker
     * @return void
     */
    public function onWorkerStart(Worker $worker): void
    {
        Log::info('定时任务进程已启动');
        // 注册所有定时任务
        $this->registerCrontabs();
    }

    /**
     * 进程停止时执行
     *
     * @param Worker $worker
     * @return void
     */
    public function onWorkerStop(Worker $worker): void
    {
        Log::info('定时任务进程已停止');
    }

    /**
     * 注册所有定时任务
     *
     * @return void
     */
    protected function registerCrontabs(): void
    {
        // 1.  每分钟执行一次
        new Crontab('* * * * *', function () {
            $this->test();
        }, '测试定时任务');
    }

    public function test()
    {
        try {
            $user = Users::find(1);
            if (!$user) {
                Log::info('用户不存在');
                return false;
            }

            Log::info('用户已存在');
            return true;
        } catch (Throwable $e) {
            Log::error($e->getMessage());
        }

    }

}

定时任务日志:

[2026-02-02 07:40:27] default.INFO: 定时任务进程已启动 [] []
[2026-02-02 07:41:01] default.ERROR: SQLSTATE[HY000] [2006] MySQL server has gone away (Connection: mysql, SQL: select * from `bw_users` where `bw_users`.`id` = 1 limit 1) [] []
[2026-02-02 07:42:00] default.ERROR: Call to a member function getBitwiseOperators() on null [] []
[2026-02-02 07:43:16] default.INFO: 定时任务进程已启动 [] []

workman.log日志:

Next Illuminate\Database\QueryException: SQLSTATE[HY000] [2006] MySQL server has gone away (Connection: mysql, SQL: select * from `bw_users` where `bw_users`.`id` = 1 limit 1) in E:\WorkSpace\Test\Server\vendor\illuminate\database\Connection.php:829
Stack trace:
#0 E:\WorkSpace\Test\Server\vendor\illuminate\database\Connection.php(983): Illuminate\Database\Connection->runQueryCallback('select * from `...', Array, Object(Closure))
#1 E:\WorkSpace\Test\Server\vendor\illuminate\database\Connection.php(962): Illuminate\Database\Connection->tryAgainIfCausedByLostConnection(Object(Illuminate\Database\QueryException), 'select * from `...', Array, Object(Closure))
#2 E:\WorkSpace\Test\Server\vendor\illuminate\database\Connection.php(785): Illuminate\Database\Connection->handleQueryException(Object(Illuminate\Database\QueryException), 'select * from `...', Array, Object(Closure))
#3 E:\WorkSpace\Test\Server\vendor\illuminate\database\Connection.php(414): Illuminate\Database\Connection->run('select * from `...', Array, Object(Closure))
#4 E:\WorkSpace\Test\Server\vendor\illuminate\database\Query\Builder.php(2913): Illuminate\Database\Connection->select('select * from `...', Array, true)
#5 E:\WorkSpace\Test\Server\vendor\illuminate\database\Query\Builder.php(2902): Illuminate\Database\Query\Builder->runSelect()
#6 E:\WorkSpace\Test\Server\vendor\illuminate\database\Query\Builder.php(3456): Illuminate\Database\Query\Builder->Illuminate\Database\Query\{closure}()
#7 E:\WorkSpace\Test\Server\vendor\illuminate\database\Query\Builder.php(2901): Illuminate\Database\Query\Builder->onceWithColumns(Array, Object(Closure))
#8 E:\WorkSpace\Test\Server\vendor\illuminate\database\Eloquent\Builder.php(739): Illuminate\Database\Query\Builder->get(Array)
#9 E:\WorkSpace\Test\Server\vendor\illuminate\database\Eloquent\Builder.php(723): Illuminate\Database\Eloquent\Builder->getModels(Array)
#10 E:\WorkSpace\Test\Server\vendor\illuminate\database\Concerns\BuildsQueries.php(333): Illuminate\Database\Eloquent\Builder->get(Array)
#11 E:\WorkSpace\Test\Server\vendor\illuminate\database\Eloquent\Builder.php(449): Illuminate\Database\Eloquent\Builder->first(Array)
#12 E:\WorkSpace\Test\Server\vendor\illuminate\support\Traits\ForwardsCalls.php(23): Illuminate\Database\Eloquent\Builder->find(1)
#13 E:\WorkSpace\Test\Server\vendor\illuminate\database\Eloquent\Model.php(2335): Illuminate\Database\Eloquent\Model->forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), 'find', Array)
#14 E:\WorkSpace\Test\Server\vendor\illuminate\database\Eloquent\Model.php(2347): Illuminate\Database\Eloquent\Model->__call('find', Array)
#15 E:\WorkSpace\Test\Server\app\process\Test.php(59): Illuminate\Database\Eloquent\Model::__callStatic('find', Array)
#16 E:\WorkSpace\Test\Server\app\process\Test.php(53): app\process\Test->test()
#17 E:\WorkSpace\Test\Server\vendor\workerman\workerman\src\Events\Select.php(481): app\process\Test->app\process\{closure}()
#18 E:\WorkSpace\Test\Server\vendor\workerman\workerman\src\Events\Select.php(340): Workerman\Events\Select->safeCall(Object(Closure), Array)
#19 E:\WorkSpace\Test\Server\vendor\workerman\workerman\src\Events\Select.php(427): Workerman\Events\Select->tick()
#20 E:\WorkSpace\Test\Server\vendor\workerman\workerman\src\Worker.php(1601): Workerman\Events\Select->run()
#21 E:\WorkSpace\Test\Server\vendor\workerman\workerman\src\Worker.php(1526): Workerman\Worker::forkWorkersForWindows()
#22 E:\WorkSpace\Test\Server\vendor\workerman\workerman\src\Worker.php(593): Workerman\Worker::forkWorkers()
#23 E:\WorkSpace\Test\Server\runtime\windows\start_test.php(33): Workerman\Worker::runAll()
#24 {main}
[PHP Modules]
bcmath       
calendar     
Core         
ctype        
date         
dom          
fileinfo     
filter       
ftp
gd
hash
iconv        
json
libxml       
mbstring
mysqlnd
openssl
pcre
PDO
pdo_mysql
Phar
random
readline
redis
Reflection
session
SimpleXML
SPL
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib

[Zend Modules]
173 1 0
1个回答

workerman workerman/coroutine webman-framework 具体版本贴下。
php start.php status 贴下。
php -m 贴下。
最小可复现代码贴下,完整的最小复现代码,不要业务。

  • 孤独剑客 1天前

    老大 我已经贴了相关数据,辛苦帮忙看下。就是在定时任务里面查询个数据,然后当我mysql关闭了 就会报这个,就算mysql开启了 他也不会自动恢复

  • walkor 1天前

    workerman/coroutine 版本没贴
    php -m 没贴

  • 孤独剑客 1天前

    workerman/coroutine 这个我好像没用到

  • walkor 1天前

    composer info | findstr coroutine
    发下

  • 孤独剑客 1天前

    workerman/coroutine 1.1.4 Workerman coroutine

  • 孤独剑客 1天前

    老大空了帮忙看下,我现在测试就定时任务的有这个问题 redis消费者的就不会。谢谢

  • 孤独剑客 1天前

    我现在参考redis消费者的代码 在每次执行完定时任务的时候 Context::destroy(); 现在mysql停机恢复了 就可以继续运行了 这样是不是可行

  • walkor 1天前

    webman/database 更新到 2.1.9 ,重启webman

  • 孤独剑客 20小时前

    测试可以了 谢谢老大

🔝