本站停止维护,已转移至laravel学习网;欢迎大家移步访问!

laravel 深入解读任务调度以及laravel 结合cron实现计时任务

Laravel 5.0 新增了一个框架内置的 cron 风格的调度程序,他其实是结合linux的cron任务来实现的,只要在服务器上设置一个每分钟调用artisan schedule:run 的 cron job, 就可以定时执行一些任务,运行一些脚本,不过说实在的,我觉得用artisan schedule:run来每分钟检查cron job来运行脚本,个人觉得并不好,不过我还是2种方法都讲一下

一.laravel任务调度

    1.在app\Console\Commands 下创建定时任务所要进行的操作,其实我们的在schedule中注册就可以,而且方法也是多种多样,我可以执行Crontroller里面的命令,也可以执行artisan的命令,关于artisan的开发,你可以看看我例外一篇文章:laravel 轻松实现Artisan的开发创建以及实现简单实例 那里我们已经注册了一个test的artisan,我们直接用一下

<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use DB;
use App\Http\Controllers\TestController;

class Kernel extends ConsoleKernel
{
   /**
    * The Artisan commands provided by your application.
    *
    * @var array
    */
   protected $commands = [
       \App\Console\Commands\Test::class,
   ];
   /**
    * Define the application's command schedule.
    *
    * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
    * @return void
    */
   protected function schedule(Schedule $schedule)
   {
       // $schedule->command('test')->cron('* */1 * * *');
       //调用artisan
       $schedule->command('test')->hourly();
       //直接操作
       $schedule->call(function () {
           DB::table('users')->delete();
       })->weekly()->mondays()->at('01:00');;
       //发送命令到操作系统
       $schedule->exec('node /home/forge/script.js')->daily();
       //执行controller
       $schedule->call('TestController@test')->hourly();
   }
}

好的,其他的基本案例,比如时间不同的定义啊,任务输出(appendOutputTo)啊,避免任务重叠(withoutOverlapping)啊,直接看官网就可以了

    2.使用,在cron中定一个任务计时,你可以看看我们的例外一篇文章:Ubuntu crontab任务计时器命令

* * * * * php /path/artisan schedule:run 1>> /dev/null 2>&1

这是官网给出的方法,其实主要是执行php artisan schedule:run 这个命令,path其实就是项目的路径啦,比如我laravel项目,存在/var/www/下,我就把path替换成var/www/laravel就可以了。好了,说完官网的方法,我来讲讲直接用linux的任务调度来编写脚本

二.laravel5结合cron完成任务计划

  1. 我们开发一个artisan命令,怎么开发呢?看一下laravel 轻松实现Artisan的开发创建以及实现简单实例

  2. 我们需要执行这些命令就可以了,linux的cron怎么执行呢?看一下Ubuntu crontab任务计时器命令 

45 11 * * * cd /var/www/laravel &&  /usr/bin/php artisan test >> /tmp/test.log

这句话什么意思呢?每天11点45 cd到项目下(/var/www/laravel),执行php artisan test 命令,并且把执行的纪录存入/tmp/test.log中,这样用起来是不是觉得是例外一种体会呢?当然,什么命令,存到哪个日志文件都是你自定义的

转载请注明 :一沙网络原文出处:http://bbs.earnp.com/article/189
问题交流群 :562864481
4
打赏
发布时间 :2016-09-25 18:22:38
分享

1 个评论

  • 一沙
    回复
    2016-09-25 20:18
    laravel No scheduled commands are ready to run. 可能会出现这个错误,检查一下错误,或者$schedule->command('test')->cron('* */1 * * *');试试

要回复文章请先登录注册