Laravel 定时任务

在 php 中使用定时器是一件不太简单的事情,之前大概只能通过 cron 来实现定时任务。但是在 Laravel5 中,定时任务将会变得很简单。

Laravel Schedule

这个是 Laravel5 中新增加的特性之一。在 Laravel5 中,进入到 app/Console/Kernel.php 中,可以看到以下代码:

     protected function schedule(Schedule $schedule)
    {
        $schedule->command('inspire')
                 ->hourly();
    }

这个 schedule 方法就是定时任务执行的关键,我们可以将所有的定时任务都放到其中,其中, Laravel 提供了诸多的方法来控制任务执行的时间间隔,例如:

    $schedule->command('foo')->everyFiveMinutes();

    $schedule->command('foo')->everyTenMinutes();

    $schedule->command('foo')->everyThirtyMinutes();

    $schedule->command('foo')->mondays();

    $schedule->command('foo')->tuesdays();

    $schedule->command('foo')->wednesdays();

    $schedule->command('foo')->thursdays();

    $schedule->command('foo')->fridays();

    $schedule->command('foo')->saturdays();

    $schedule->command('foo')->sundays();

我们既可以通过创建 Command 来作为任务来执行,也可以使用闭包函数来作为任务:

    $schedule->call(function()
    {
        //TODO ...

    })->hourly();

就这样,要执行的任务就可以简单的创建。

启动 Schedule

在定义完以上的任务之后,可以通过 php artisan schedule:run 来执行这些任务,但是,这个任务执行起来后,需要不断的执行这个这个命令定时器才能不断的运行,所以就需要 linux 的系统功能的帮助,在命令行下执行下面的命令:

    crontab -e

执行完以上的命令之后,会出现一个处于编辑状态的文件,在文件中填入以下内容:

    * * * * * php /path/to/artisan schedule:run

然后保存,关闭。上面命令的含义是每隔一分中就执行一下 schedule:run命令。这样一来,前面定义的任务就可以不断的按照定义的时间间隔不断的执行,定时任务的功能也就实现了。

注:这个仅仅是在 linux 平台上,windows 还没研究过实现方法。

本帖已被设为精华帖!
本帖由系统于 6年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 15
hellloveyy

请问在mac下使用valet 怎么测试cron呢。。。。在线等 挺急的?

6年前 评论
levi 4年前

你好,我的这个在控制台可以执行,但是crontab 不能执行是什么原因

6年前 评论
幽弥狂

@wpby 我也是这个问题。。。求解答

6年前 评论
幽弥狂

@wpby 谢谢帅哥 确实解决了

6年前 评论

不错不错,学习到了

6年前 评论

Windows下的计划任务也是可以的。我的测试结果是PHP需要给绝对路径

5年前 评论

其实就是利用服务器的计划任务程序去执行脚本

4年前 评论
bestcyt

@ipanda 老哥,Windows下要怎么搞啊?

4年前 评论

@bestcyt Windows下的计划任务啊

4年前 评论

没啥意义啊,还要用Linux的crontab

3年前 评论

为什么找不到 crontab -e 对应的文件路径, 直接 vim /tmp/crontab.bUHcDu/crontab 找不到原文件 ?

3年前 评论

如果修改了定时任务时间,岂不是要修改代码,再步步提交到正式环境,很不灵活吧

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!