laravel5.1 定时任务

https://blog.csdn.net/zhezhebie/article/details/79205414

1.创建任务计划的主文件:

php artisan make:console 定时文件名

也可以跟--command testconsole,这个就是命令的标识,加了的话待会儿在运行php artisan list的时候就可以看到这个命令,如果不加,看不到,但是照样可以执行。

执行以上命令之后,会生成如下文件,我的开发环境是win10,执行计划任务最后是在Linux上执行,Windows下面只要测试通过了就可以传到Linux下。

app\Console\Commands\定时文件名.php

2.进到这个文件,修改一下代码:

这个里面就三个参数,

signature:信号的名字;

description:任务描述;

handle():方法就是要执行的代码了,里面和写一般的controller方法一样,该引用的还是要引用;

3.写定时器:

进到app\Console\Kernel.php修改如下代码:

commands:里面需要把要用的定时任务的class都引进来;

schedule:里面就可以定义执行的命令和执行的周期。

其他可用周期可以查看如下文件:

vendor\laravel\framework\src\Illuminate\Console\Scheduling\Event.php

4.下面我们就在windows下面测试一下能否正常执行:

php artisan signature(信号的名字)

我在测试的方法里面没有进行输出,所以执行完命令之后没反应,但是我们直接去日志文件,可以看到我们的log信息已经写进去了,这表明任务计划代码没有问题,windows下面只能测试,真正执行任务计划要到linux下面去,windows下面也可以执行任务计划,但是比较繁琐,这里仅仅测试代码是否按照我们预想的执行.

执行结果如下:

5.把代码推到linux下,编辑定时任务:

sudo crontab -e

!!!是不是需要每见一个计划任务就建个专门的命令和专门的文件?可不可以在一个文件里面写所有的任务计划? 

解决方案如下:

1、运行命令并把结果发送邮件:

$schedule->command('cache:clear')

    ->hourly()

    ->sendOutputTo($filePath)

    ->emailOutputTo('[email protected]');

2、直接调用类里面额方法:

$schedule->call('SomeClass@method')->dailyAt('10:00');

3、闭包调用:

$schedule->call(function(){

    //..

})->everyThirtyMinutes();

4、命令行:

$schedule->terminal('gulp task')->fridays()->when(function(){

    return true;

    });

http://laravelacademy.org/post/235.html  更多laravel定时

你可能感兴趣的:(laravel5.1 定时任务)