laravel任务调度

创建调度

按照文档在App\Console\Kernel中添加两个调度,一个分钟执行一次,一个5分钟执行一次

$schedule->call(function (){
            Log::info("test_1");
        })->everyMinute();

$schedule->call(function (){
            Log::info("test_2");
        })->everyFiveMinutes();

直接运行schedule:run

然后直接运行php artsian schedule:run,在log日志中生成以下记录 schedule 运行两次命令 5分钟的都没有执行

配置crontab执行schedule

这次按照文档在crontab中运行 运行crontab -e输入下面命令 目录替换成自己的项目目录

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

保存后过一会儿查看日志记录,输出为下图 cap test_2只在5的整数分钟执行

结果

everyMinute 在运行命令时会立刻执行 everyFiveMinutes 只有5的整数分钟才会执行

schedule也是依靠crontab执行的,所以官方文档在一开始就配置了cron入口,推测5分钟 10分钟的命令并不是按执行时间算,而是整点计算的。有时间可以找找文档或看下源码