Laravel 10中everySecond等亚分钟调度方法无法正常使用求助
Laravel 10 秒级调度报错的解决办法
你遇到的问题核心在于:Laravel 10 并不支持everySecond()、everyTwoSeconds()这类亚分钟调度方法——这些方法是Laravel 11才新增的特性,你可能误看了更高版本的官方文档。
解决思路
方法1:任务内循环实现秒级执行
利用Laravel原生的分钟级调度,在任务内部通过循环+休眠来模拟秒级间隔。比如要每2秒执行一次业务逻辑:
修改StrategicTest1的handle方法:
public function handle(): void { // 每分钟执行30次(60/2=30),每次间隔2秒 for ($i = 0; $i < 30; $i++) { // 你的业务逻辑 $st = Stretegy::find(1); $st->comment1 = random_int(1, 400); $st->code = 'st testing'.random_int(1, 400); $st->save(); // 休眠2秒,控制执行间隔 sleep(2); } }
调度代码保持分钟级即可:
protected function schedule(Schedule $schedule): void { $schedule->job(new StrategicTest1)->everyMinute(); }
方法2:使用第三方扩展包
可以用spatie/laravel-short-schedule扩展包,它专门为Laravel提供亚分钟级调度支持,安装后就能用类似everySecond()的语法:
- 安装包:
composer require spatie/laravel-short-schedule
- 发布配置文件(可选):
php artisan vendor:publish --provider="Spatie\ShortSchedule\ShortScheduleServiceProvider"
- 修改调度代码:
protected function schedule(Schedule $schedule): void { $schedule->job(new StrategicTest1)->everySeconds(2); }
方法3:升级到Laravel 11
如果项目允许升级,直接升级到Laravel 11,就能原生支持everySecond()、everyTwoSeconds()等方法,无需额外配置。
内容的提问来源于stack exchange,提问作者DAVID AJAYI
相关产品推荐
相关产品推荐

