laravel任务调度
Posted 微笑的死神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel任务调度相关的知识,希望对你有一定的参考价值。
一、解决问题:取消服务器多cron调用,使用一个cron就可以完成laravel全部commands下的命令
二、操作方法
1、新建command文件:这里新建两个定时任务,模拟多任务php artisan make:command UpdateArticle
php artisan make:command delArticle
2、文件对应内容
1)UpdateArticle定时任务中内容
<?php
namespace App\\Console\\Commands;
use Illuminate\\Console\\Command;
class UpdateArticle extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = \'UpdateArticle\';
/**
* The console command description.
*
* @var string
*/
protected $description = \'更新相似文章\';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
//操作逻辑
var_dump(\'更新相似文章成功\'.date("Y-m-d H:i:s"));
//模拟执行时间
sleep(80);
}
}
2)DelArticle定时任务中内容
namespace App\\Console\\Commands;
use Illuminate\\Console\\Command;
class delArticle extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = \'DelArticle\';
/**
* 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 int
*/
public function handle()
{
var_dump("删除文章成功");
}
}
3、shechdule中添加UpdateArticle、DelArticle命令
namespace App\\Console;
use Illuminate\\Console\\Scheduling\\Schedule;
use Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
\\App\\Console\\Commands\\UpdateArticle::class
];
/**
* Define the application\'s command schedule.
*
* @param \\Illuminate\\Console\\Scheduling\\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
//输出日志保存位置
$logPath = \'D:\\wwwroot\\laraveldemo\\app\\Console\\log.txt\';
//修改文章demo
$schedule->command(\'UpdateArticle\')->everyMinute()->appendOutputTo($logPath)->onOneServer()->withoutOverlapping(\'10\');
//修改文章demo
$schedule->command(\'DelArticle\')->everyFiveMinutes()->appendOutputTo($logPath)->onOneServer()->withoutOverlapping(\'10\');
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.\'/Commands\');
require base_path(\'routes/console.php\');
}
}
4、定时任务执行schedule:run方法
1)window手动模拟
D:\\wwwroot\\laraveldemo>php artisan schedule:run
2)服务器定时任务
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
5、schedule:run执行中会出现的情况
1)提示 No scheduled commands are ready to run.
出现这个情况是添加withoutOverlapping()
造成的,删除 /storage/farmework/chache 文件夹下面的缓存就可以了,如果缓存用的是Redis等,则需要删除其对应的缓存
以上是关于laravel任务调度的主要内容,如果未能解决你的问题,请参考以下文章