今天给大家分享的是在Linux服务器,laravel框架下做的定时任务
首先先介绍在laravel框架下需要做的准备工作
一、先介绍如何在框架内使用任务调度
任务调度(即定时任务)是在app/Console/Kernel.php文件的schedule方法中定义的。下面说一下如何定义调度
任务调度可以在schedule中使用call方法来进行逻辑处理,如下:/**
* 定义应用的命令调度
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
DB::table('recent_users')->delete();
})->daily();
}
将业务逻辑直接放在call方法里处理,本身是没有错误的。但是我个人考虑到了一种情况,就是如果将来定时任务需求增多,业务处理逻辑代码又多,那么就会造成schedule方法很长,后期代码的可读性比较差。所以我这里为大家推荐的是使用artisan命令解决这个问题。
二、Artisan命令
我们先熟悉一下Artisan的一些基础命令,
查看artisan命令列表:php artisan list
生成命令:php artisan make:command "你定的类名",
如:
php artisan make:command CheckProject,则会在app/Console/Commands下生成CheckProject.php文件class CheckProject extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'aixing:checkProject';
/**
* The console command description.
*
* @var string
*/
protected $description = 'overTime project';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//修改项目状态
Project::where('end_time','where('project_status','<>','4')->update(['project_status'=>'4']);
$log=new Logger('checkProject');
$log->pushHandler(new StreamHandler(storage_path('logs/check.log'),Logger::INFO));
$log->addInfo('项目状态检查');
}
}
如上代码所示,为执行artisan命令以后的结果(程序业务逻辑已经加了上去),在执行命令时会调用handle方法,所以可以在这个方法里写入逻辑处理
这里着重需要说的一个参数是protected $signature = 'aixing:checkProject';
这是控制台命令signature的名称,在任务调度执行artisan命令所需要的。
到这里有朋友可能就会问,我如何知道我创建的这个类已经成功了。可以使用php artisan list命令执行查看,当可以看到aixing:checkProject
就是成功了。
如上图所示。
那么到这里就开始写任务调度里的了。
三、Artisan命令调度执行protected function schedule(Schedule $schedule)
{
$schedule->command('aixing:checkProject')->everyMinute();
}
调度Artisan命令要使用command方法。
到这里,在laravel框架里需要做的工作就结束了。
四、linux定时任务部署
先确定php的可执行命令行的绝对路径,whereis php解决
然后我们开始部署Linux定时任务
进入定时任务编辑页面。如果你的定时任务想要部署在root账户下面,可直接crontab -e
将启用调度器的命令写入文件,:wq保存退出,即定时任务完成。