在php程序中,需要执行定时任务的地方, 往往通过linux系统中的cron来实现。如果有多个任务,而且所需要的时间都不相同的时候,cron管理起来很不方便。为此,Laravel框架提供了一个方便的功能实现任务的定时执行。
在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();
在定义完以上的任务之后,可以通过 php artisan schedule:run 来执行这些任务,但是,这个任务执行起来后,需要不断的执行这个这个命令定时器才能不断的运行,所以就需要 linux 的系统功能的帮助,在命令行下执行下面的命令:
vi /etc/crontab
编辑文件,在最后加入一行:
* * * * * php /path/to/artisan schedule:run >> /var/log/cron.log 2>&1
表示每分钟执行一次artisan schedule:run,并且将所有输出保存到日志中以便排查问题。保存后退出就可以开始自动定时执行任务了。
网友评论