1.创建一个自定义的Command
# php artisan make:command Hello
2.编辑Hello.php文件(app/Console/Commands/Hello.php)
?
?
<?php
namespace App\Console\Commands;
use App\Http\Controllers\CeShiController;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class Hello extends Command
{
//名称
protected $signature = 'command:ceshi';
//描述
protected $description = 'Command description';
public function __construct()
{
parent::__construct();
}
//执行的业务
public function handle()
{
//调用方法
(new CeShiController())->ceshi();
//或者直接书写逻辑
//Log::info(time().'测试定时任务');
}
}
3.修改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 = [
Hello::class
];
//定义计划任务和执行事件
protected function schedule(Schedule $schedule)
{
//每分钟执行一次名称为command:ceshi的任务
$schedule->command('command:ceshi')->everyMinute()->withoutOverlapping;
// 工作日(周一至周五) 8 点 至 17 点每小时执行一次
//$schedule->command('foo')
// ->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(); | 避免任务重复执行 |
4.执行定时任务
? ?手动执行:php artisan command:ceshi (名称)
? ? 服务器自动执行:
1.编辑定时任务:
crontab -e
2.php多版本可以将php改为版本的绝对路径,项目路径
?* * * * * php /www/wwwroot/ceshi/artisan schedule:run >> /www/wwwroot/ceshi/test.txt 2>&1
3.保存重启cron服务
CentOS7方法:
重启服务 systemctl restart crond.service?
CentOS6方法:
重启服务
service crond restart
5.结果
local.INFO: 1645090022定时任务
local.INFO: 1645090081定时任务
local.INFO: 1645090142定时任务
local.INFO: 1645090201定时任务
local.INFO: 1645090262定时任务
|