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('john@doe.com');
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定时
网友评论