项目经常用到定时执行的任务,比如:
- 数据统计
- 服务监控
每次添加一条任务,就修改 crontab比较麻烦,下面介绍下,基于 Laravel的定时任务开发 注意事项
Linux 添加一条 定时配置
crontab -e
* * * * * php /**项目路径**/artisan schedule:run >> /dev/null 2>&1
(参数说明:分 时 日 月 周)
开发命令行执行程序
# 创建任务 php artisan make:command TestTask
# 修改 TestTask 的 signature (eg: testtask {--date=}),在 handle() 中编写业务逻辑
# 命令号执行任务 php artisan testtask:stat
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class TestTask extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'testtask:stat';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//TODO
}
}
配置定时任务
1.修改 app/Console/Kernel.php
class Kernel extends ConsoleKernel
{
protected $commands = [
TestTask::class
];
protected function schedule(Schedule $schedule)
{
//每天 凌晨 00:01 开始执行
$cron = '01 00 * * *'; // 这里可以读取数据库中的配置
$date = date('Y-m-d');
$schedule->command('testtask:stat --date='.$date)->cron($cron);
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
- php.ini 中 开启函数 proc_open、proc_get_status
遇到问题 & 注意事项
* 配置按照流程配置完毕,指定了执行的时间后,执行 php /项目路径/artisan schedule:run
* 总是提示 No scheduled commands are ready to run。
* 解决: 1.检查 laravel 项目的时区 2.检查 linux 系统的时区
网友评论