PHP命令行和定时任务,Laravel结合任务调度和artisan命令做的定时任务(Linux系统)

本文介绍了在Laravel框架中设置和管理定时任务的方法,包括在`Kernel.php`文件中定义任务调度,以及通过Artisan命令来组织复杂的业务逻辑。通过创建自定义Artisan命令并将其添加到调度中,提高了代码的可读性和可维护性。此外,还详细讲解了如何在Linux服务器上部署这些定时任务,包括找到PHP命令行的路径和使用`crontab`设置定时执行。
摘要由CSDN通过智能技术生成

今天给大家分享的是在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

就是成功了。

951819819f705617794add4f87415072.png

如上图所示。

那么到这里就开始写任务调度里的了。

三、Artisan命令调度执行protected function schedule(Schedule $schedule)

{

$schedule->command('aixing:checkProject')->everyMinute();

}

调度Artisan命令要使用command方法。

到这里,在laravel框架里需要做的工作就结束了。

四、linux定时任务部署

先确定php的可执行命令行的绝对路径,whereis php解决

c438829dc910e9ffc604c54873ead85c.png然后我们开始部署Linux定时任务

14fca4e86e732b2de8b95834e028e926.png

进入定时任务编辑页面。如果你的定时任务想要部署在root账户下面,可直接crontab -e

7d3478c5157928f1c4e0c3bced05c6e4.png

将启用调度器的命令写入文件,:wq保存退出,即定时任务完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值