laravel5定时任务配合linux使用说明

9 篇文章 0 订阅
8 篇文章 0 订阅

过去,你可能有一个任务,就需要在linux的crontab上写一个任务去定时执行,并且一些关于任务的时间也得上linux上点点的去个更改;而laravel的任务调度,你只需在代码上去写你的任务;因为laravel建设一个入口,linux定时任务只需指向这个入口就ok了.

  1. 启动调度器(把linux定时任务指向lavavel的cron入口)

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

path-to-your-project为你在linux上的项目路径

  1. 定义调度(在laravel下Console/Kernel.php里写任务)
<?php 

namespace App\Console;

use DB;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * 应用里的自定义 Artisan 命令
     *
     * @var array
     */
    protected $commands = [
        //
    ];

    /**
     * 定义计划任务
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
     //方法一:
      //         $schedule->call(function () { 
      //      Log::info('任务调度'); 
      //      })->everyMinute();
        //方法二: 
        $schedule->command('test')->everyMinute();

/**方法一就是在该函数里写入任务,方法二则专门调用写的类来作为任务

    }
}
?>

下面介绍方法二

  1. 定义Artisan命令的方法

首先使用该命令
php artisan make:command Test
创建完之后,打开console目录下的commands目录,我们会发现里面已经有了一个文件

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;

class Test extends Command
{
    /**
     * The name and signature of the console command.
     *此处代表laravel自动生成的名称,下面执行的时候能用到
     * @var string
     */
    protected $signature = 'test:log';

    /**
     * The console command description.
     *此处代表的是描述,并没有什么用的
     * @var string
     */
    protected $description = 'Command description';


    /**
     * 计算数据服务的 service 属性
     *这里由于要用到我们的逻辑,所以提前定义一下,方便下面使用
     * @var CalculateDataService
     */
    protected $service;

    /**
     * Create a new command instance.
     *  这个是laravel自带的构造方法。初始状态下是空的。我这里由于要调用CalculateDataService 类的一个方法,所有就用依赖注入的方式引入了一下。
     * @return void
     */
    public function __construct(CalculateDataService $service)
    {
        parent::__construct();
          $this->service = $service;
    }

    /**
     * Execute the console command.
     *这里就是我们执行操作的地方,里面是command要处理的业务。根据我们的需求,
    *调用类中的calculateData()方法,该方法是我们自己的需求逻辑部分。
     * @return mixed
     */
    public function handle()
    {
      Log::info('任务调度'.time());
      /*try {
        $this->service->calculateData();
      } catch (\Exception $e) {
        $this->error($e->getMessage());
      }
      //  line()方法是command类中自带的方法,可以输出我们自定义的信息
       $this->line('calculate Data Success!');*/

    }
}

这样一套流程下来就是在laravel中只需要在kernel.php中写任务的时间和任务,然后linux定时器执行该入口,方便了一些

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值