laravel 定时任务
程序员文章站
2022-05-19 19:19:22
...
前言
使用 Laravel 的定时任务可以便捷的实现Linux的Cron
进入linux定时任务管理:(一般使用www跑定时任务,ROOT用户跑定时任务容易导致用户访问URL链接生成的日志没有权限的问题)
crontab -e -u www
新增一条记录
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
新建定时任务
- 新增CommandDemo1文件
php artisan make:command CommandDemo1
echo 内容到laravel.log文件:
info('CommandDemo1 start');
info('CommandDemo1 end');
- 新增CommandDemo2文件
php artisan make:command CommandDemo2
文件内容
info('CommandDemo2 start');
sleep(2);
info('CommandDemo2 end');
- 新增CommandDemo3文件
php artisan make:command CommandDemo3
文件内容
在Kenel.php中新增调用
$schedule->command('CommandDemo1')->everyMinute();
$schedule->command('CommandDemo2')->everyMinute()->runInBackground();
$schedule->command('CommandDemo3')->everyMinute();
调用 Laravel定时任务后,输出顺序:
[2020-11-19 16:34:02] local.INFO: CommandDemo1 start
[2020-11-19 16:34:02] local.INFO: CommandDemo1 end
[2020-11-19 16:34:02] local.INFO: CommandDemo2 start
[2020-11-19 16:34:02] local.INFO: CommandDemo3 start
[2020-11-19 16:34:02] local.INFO: CommandDemo3 end
[2020-11-19 16:34:04] local.INFO: CommandDemo2 end
Laravel 任务调度默认是顺序阻塞执行 ,在执行耗时任务时,需要链式指定 runInBackground(),防止出现阻塞,导致其他任务出现意外。
常用方法
方法 | 描述 |
---|---|
->cron('* * * * *'); |
在自定义Cron调度上运行任务 |
->everyMinute(); |
每分钟运行一次任务 |
->everyFiveMinutes(); |
每五分钟运行一次任务 |
->everyTenMinutes(); |
每十分钟运行一次任务 |
->everyFifteenMinutes(); |
每十五分钟运行一次任务 |
->everyThirtyMinutes(); |
每三十分钟运行一次任务 |
->hourly(); |
每小时运行一次任务 |
->hourlyAt(17); |
每小时第十七分钟运行一次任务 |
->daily(); |
每天凌晨零点运行任务 |
->dailyAt('13:00'); |
每天13:00运行任务 |
->twiceDaily(1, 13); |
每天1:00 & 13:00运行任务 |
->weekly(); |
每周运行一次任务 |
->monthly(); |
每月运行一次任务 |
->monthlyOn(4, '15:00'); |
每月4号15:00运行一次任务 |
->quarterly(); |
每个季度运行一次 |
->yearly(); |
每年运行一次 |
->timezone('America/New_York'); |
设置时区 |
调度 Shell 命令
$schedule->exec('node /home/forge/script.js')->daily();
更新详细使用过程参考
上一篇: Laravel 定时任务
下一篇: windows下laravel的定时任务