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
还没研究过实现方法。
请问在mac下使用valet 怎么测试cron呢。。。。在线等 挺急的?
你好,我的这个在控制台可以执行,但是crontab 不能执行是什么原因
@wpby 我也是这个问题。。。求解答
@xhh110 问答:Ubuntu16.04+crontab 定时任务不执? 看这个帖子,完美解决问题
@wpby 谢谢帅哥 确实解决了
不错不错,学习到了
@流雪易丢 谢谢了~
Windows下的计划任务也是可以的。我的测试结果是PHP需要给绝对路径
其实就是利用服务器的计划任务程序去执行脚本
@ipanda 老哥,Windows下要怎么搞啊?
@bestcyt Windows下的计划任务啊
没啥意义啊,还要用Linux的crontab
为什么找不到 crontab -e 对应的文件路径, 直接 vim /tmp/crontab.bUHcDu/crontab 找不到原文件 ?
如果修改了定时任务时间,岂不是要修改代码,再步步提交到正式环境,很不灵活吧