了解下 laravel 定时任务是怎么使用的

首先在linux上创建一个crontab命令. crontab -e 第一次用的时候会选择编辑器,默认nano 然后在crontab文件中添加一行命令:

1
***** php /path/to/artisan schedule:run 1>>/dev/null2>&1

linux上的操作就完毕了,接下来是在框架中的操作:

在 app/Console/Kernel.php文件中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Http\Controllers\SystemConf\SiteVisitorController;

class Kernel extends ConsoleKernel
{
/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
protected $commands = [
//这里是注册自定义命令的,如果不想调用控制器方法就把cron任务写到命令中,也是很方便
Commands\Inspire::class,
    ];

/**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
protected function schedule(Schedule $schedule)
{
    //这条命令是测试用的,通过检查是否添加了数据迁移文件来看cron是否已经正常运行
    $schedule->command('make:migration test')
    //->everyMinute()      //每分钟执行
        ->cron('* * * * *');   //linux上cronTab的周期格式
    //当调用控制器的方法的时候,一定要把命名空间写全,不然是找不到的,
    //在文件中用了 use 也没用,因为传入的是字符串
    $schedule->call('App\Http\Controllers\SystemConf\SiteVisitorController@test')
    ->cron('* * * * *');
}

这里仅仅是用artisan命令做了一个测试,实际也可以调用服务,有了这个例子再结合文档来看对小白来说估计就稍微不那么蒙圈了