hyperf / swow-skeleton

Skeleton for Swow
MIT License
44 stars 9 forks source link

Crontab 开启 onOneServer true 会报错 #15

Open zxyfaxcn opened 1 year ago

zxyfaxcn commented 1 year ago

环境:swow-skeleton: 3.0 swow: 1.0

#[Crontab(rule: "* * * * * *", name: "Foo", callback: "execute", memo: "这是一个示例的定时任务")]
class FooTask
{
    #[Inject]
    private StdoutLoggerInterface $logger;

    public function execute(): void
    {
        $this->logger->info(date('Y-m-d H:i:s', time()));
    }

    #[Crontab(rule: "* * * * * *", memo: "foo")]
    public function foo(): void
    {
        var_dump('foo');
    }
}

已设置 :

// config/autoload/processes.php
return [
    Hyperf\Crontab\Process\CrontabDispatcherProcess::class,
];
// config/autoload/dependencies.php
return [
    # crontab 协程模式调度器
    Hyperf\Crontab\Strategy\StrategyInterface::class => Hyperf\Crontab\Strategy\CoroutineStrategy::class,
]
// config/autoload/crontab.php
return [
    'enable' => true,
    'crontab' => [
    ],
];
zxyfaxcn commented 1 year ago

crontab 开启 onOneServer true 会报如下错误:

[WARNING] Error: Call to undefined function Hyperf\Crontab\Mutex\swoole_get_local_mac() in /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/crontab/src/Mutex/RedisServerMutex.php:72
Stack trace:
#0 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/crontab/src/Mutex/RedisServerMutex.php(27): Hyperf\Crontab\Mutex\RedisServerMutex->getMacAddress()
#1 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/di/src/Resolver/ObjectResolver.php(84): Hyperf\Crontab\Mutex\RedisServerMutex->__construct(Object(Hyperf\Redis\RedisFactory))
#2 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/di/src/Resolver/ObjectResolver.php(51): Hyperf\Di\Resolver\ObjectResolver->createInstance(Object(Hyperf\Di\Definition\ObjectDefinition), Array)
#3 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/di/src/Resolver/ResolverDispatcher.php(50): Hyperf\Di\Resolver\ObjectResolver->resolve(Object(Hyperf\Di\Definition\ObjectDefinition), Array)
#4 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/dstring(3) "foo"
i/src/Resolver/DepthGuard.php(67): Hyperf\Di\Resolver\ResolverDispatcher->Hyperf\Di\Resolver\{closure}()
#5 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/di/src/Resolver/ResolverDispatcher.php(51): Hyperf\Di\Resolver\DepthGuard->call('Hyperf\\Crontab\\...', Object(Closure))
#6 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/di/src/Container.php(186): Hyperf\Di\Resolver\ResolverDispatcher->resolve(Object(Hyperf\Di\Definition\ObjectDefinition), Array)
#7 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/di/src/Container.php(71): Hyperf\Di\Container->resolveDefinition(Object(Hyperf\Di\Definition\ObjectDefinition), Array)
#8 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/di/src/Container.php(116): Hyperf\Di\Container->make('Hyperf\\Crontab\\...')
#9 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/crontab/src/Strategy/Executor.php(166): Hyperf\Di\Container->get('Hyperf\\Crontab\\...')
#10 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/crontab/src/Strategy/Executor.php(150): Hyperf\Crontab\Strategy\Executor->getServerMutex()
#11 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/utils/src/Coroutine.php(67): Hyperf\Crontab\Strategy\Executor->Hyperf\Crontab\Strategy\{closure}()
#12 [internal function]: Hyperf\Utils\Coroutine::Hyperf\Utils\{closure}()
#13 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/engine-swow/src/Coroutine.php(71): Swow\Coroutine->resume()
#14 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/utils/src/Coroutine.php(71): Hyperf\Engine\Coroutine::create(Object(Closure))
#15 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/crontab/src/Strategy/Executor.php(90): Hyperf\Utils\Coroutine::create(Object(Closure))
#16 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/coordinator/src/Timer.php(38): Hyperf\Crontab\Strategy\Executor->Hyperf\Crontab\Strategy\{closure}(false)
#17 /Users/mbp/Downloads/swow-skeleton-master/vendor/hyperf/utils/src/Coroutine.php(67): Hyperf\Coordinator\Timer->Hyperf\Coordinator\{closure}()
#18 [internal function]: Hyperf\Utils\Coroutine::Hyperf\Utils\{closure}()
#19 {main}