laravel 任务调度

我也是在这之前没有接触过laravel的任务调度,参考的是这篇laravel定时任务,然后自己总结来写篇了这文章,方便自己以后使用。

laravel框架是自带有个任务调度的。中文手册laravel5.4任务调度

看文档

按照文档流程,第一步先去服务器添加一条定时任务,这里你需要先看看自己php配置全局变量没有,在服务器命令行输入

php -v

随便在服务器什么位置都行,如果没有报错,就证明你配置了php全局变量。没有配置的建议去百度下如何配置,没有配置请写php启动的绝对路径

然后在服务器写入这个定时任务

* * * * * /usr/bin/php /var/www/test/artisan schedule:run >> /dev/null 2>&1

上面这里/usr/bin/php是php的路径,可以使用命令行

whereis php

或者

which php

来查看。

/var/www/test/artisan是项目地址根目录下的artisan文件的绝对路径,接着用使用命令创建

 

php artisan make:command TestConsole

 

会在app\Console下生成一个Commands文件夹,同时生成TestConsole.php,以下就是TestConsole.php的内容

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class TestConsole extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * 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()
    {
        //
    }
}

让我们来看看这个文件,protected $signature = 'command:name';为命名名称就跟上面创建此文件的一样 make:command

protected $description = 'Command description';这是改成说明描述,

public function handle()主要就是写业务功能;

在TestConsole.php加上use Illuminate\Support\Facades\Log;

在public function handle()写入Log::info('laravel定时任务'.time());

<?php

namespace App\Console\Commands;

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

class TestConsole extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'test:log';

    /**
     * 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 mixed
     */
    public function handle()
    {
        //
		Log::info('laravel定时任务'.time());
    }
}

然后去app\Console下的Kernel.php,我们开打来看看

<?php

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 = [
        //
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')
        //          ->hourly();
    }

    /**
     * Register the Closure based commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        require base_path('routes/console.php');
    }
}

 看这个文件,protected $commands = [  ];这里就写刚刚我们创建的TestConsole.php文档的地址,

\App\Console\Commands\TestConsole::class或者Commands\TestConsole::class。

protected function schedule(Schedule $schedule)就是写任务调度了。在里面写上$schedule->command('testconsole')->everyMinute();意思就是每一分钟运行一次TestConsole.php。

<?php

namespace App\Console;

//use DB;
use Illuminate\Support\Facades\DB;
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\TestConsole::class,
		//Commands\TestConsole::class
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
		$schedule->command('test:log')->everyMinute();
    }

    /**
     * Register the Closure based commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        require base_path('routes/console.php');
    }
}
php artisan test:log

这时候我们就可以去看我们的定时任务成功没有,来到storage\logs\laravel.log,就可以查看有没有我们在TestConsole.php文件写入的Log::info('laravel定时任务'.time());如果是用服务器直接查看的小伙伴就不要用cat命令了,可能laravel.log行数很多,我们查看最后几行就好了,使用命令tail命令查看最后20行

 

tail -n 20 storage/logs/laravel.log

这时候就能发现我们的laravel的任务调度成功调用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值