Laravel定时任务
1.创建一个自定义的Command
php artisan make:command Test
1
2.编辑Test.php文件(app/Console/Commands/Test.php)
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class Test extends Command
{
/**
* 名称
* 执行命令 : php artisan Test:command
* @var string
*/
protected $signature = 'Test:command';
//描述
protected $description = 'Command description';
public function __construct()
{
parent::__construct();
}
//执行的业务
public function handle()
{
//调用方法
$this->run_perform();
//或者直接书写逻辑
//Log::info(time().'测试定时任务');
}
private function run_perform()
{
//逻辑代码
}
}
3.修改App\Console\Kernel.php
<?php
namespace App\Console;
use App\Console\Commands\Hello;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
//应用中自定义的 Artisan 命令,可多个
protected $commands = [
];
//定义计划任务和执行事件
protected function schedule(Schedule $schedule)
{
//每分钟执行一次名称为command:ceshi的任务
$schedule->command('Test:command')->withoutOverlapping()->everyMinute();
或
$schedule->command(Test::class)->withoutOverlapping()->everyMinute();
// 工作日(周一至周五) 8 点 至 17 点每小时执行一次
//$schedule->command(Test ::class)
// ->weekdays()
// ->hourly()
// ->timezone('America/Chicago')
// ->between('8:00', '17:00');
}
protected function commands()
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
}
调用频率和限制
方法 描述
->cron(‘* * * * *’); 自定义 Cron 计划执行任务
->everyMinute(); 每分钟执行一次任务
->everyFiveMinutes(); 每五分钟执行一次任务
->everyTenMinutes(); 每十分钟执行一次任务
->everyFifteenMinutes(); 每十五分钟执行一次任务
->everyThirtyMinutes(); 每三十分钟执行一次任务
->hourly(); 每小时执行一次任务
->hourlyAt(17); 每小时第 17 分钟执行一次任务
->daily(); 每天 0 点执行一次任务
->dailyAt(‘13:00’); 每天 13 点执行一次任务
->twiceDaily(1, 13); 每天 1 点及 13 点各执行一次任务
->weekly(); 每周日 0 点执行一次任务
->weeklyOn(1, ‘8:00’); 每周一的 8 点执行一次任务
->monthly(); 每月第一天 0 点执行一次任务
->monthlyOn(4, ‘15:00’); 每月 4 号的 15 点 执行一次任务
->quarterly(); 每季度第一天 0 点执行一次任务
->yearly(); 每年第一天 0 点执行一次任务
->timezone(‘America/New_York’) 设置时区
->weekdays(); 限制任务在工作日执行
->weekends(); 限制任务在周末执行
->sundays(); 限制任务在周日执行
->mondays(); 限制任务在周一执行
->tuesdays(); 限制任务在周二执行
->wednesdays(); 限制任务在周三执行
->thursdays(); 限制任务在周四执行
->fridays(); 限制任务在周五执行
->saturdays(); 限制任务在周六执行
->between($start, $end); 限制任务在 $start 和 $end 区间执行->hourly()->between(‘7:00’, ‘22:00’);
->when(Closure); 限制任务在闭包返回为真时执行
->environments($env); 限制任务在特定环境执行
->withoutOverlapping(); 默认情况下,即使之前的任务实例还在执行,调度内的任务也会执行。为避免这种情况的发生
->runInBackground() 默认情况下,计划同时运行的多个命令将会顺序执行。若你有长时间运行的命令,这可能导致后续命令的启动时间比预期的更晚。你可以使用 runInBackground 方法让命令在后台运行
->onOneServer() 你的应用在多台服务器中运行,你可能需要限制某个计划任务仅在单台服务器上运行
其他的用法可以查看官方文档 https://learnku.com/docs/laravel/7.x/scheduling/7492#introduction
4.执行定时任务
手动执行某单个任务:
php artisan Test:command (名称)
服务器自动执行:
1.编辑定时任务:
crontab -e
2.php多版本可以将php改为版本的绝对路径,项目路径
* * * * * php /www/wwwroot/ceshi/artisan schedule:run >> /www/wwwroot/ceshi/test.txt 2>&1
或不打印日志
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
3.重启服务器
CentOS7方法重启服务
systemctl restart crond.service
CentOS6方法重启服务
service crond restart
最后更新于 2022-08-24 14:26:02 并被添加「」标签,已有 740 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭