Laravel的原生调度器允许您安排Artisan命令每分钟运行一次。在我正在工作的项目中,我需要安排一个命令每几秒运行一次。我找到了一个很好的解决方案,使用由ReactPHP提供的事件循环。因为这个解决方案对其他人也可能有帮助,所以我决定将其打包。
使用laravel-short-schedule包,您可以将Artisan命令安排为每秒甚至更低频率运行。在这篇博客文章中,我想介绍这个包。
使用子分钟频率安排命令
如果您需要更高频率地执行某些操作,您应该将名为shortSchedule
的方法添加到app\Console\Kernel
中,并让它接受\Spatie\ShortSchedule\ShortSchedule
的实例。在这个方法内部,您可以安排您的命令。以下是一个示例
// in app\Console\Kernel.php
protected function shortSchedule(\Spatie\ShortSchedule\ShortSchedule $shortSchedule)
{
// this command will run every second
$shortSchedule->command('artisan-command')->everySecond();
// this command will run every 30 seconds
$shortSchedule->command('another-artisan-command')->everySeconds(30);
// this command will run every half a second
$shortSchedule->command('another-artisan-command')->everySeconds(0.5);
}
除了Artisan命令,您还可以安排bash命令。
$shortSchedule->bash('any-bash-command')->everySecond();
默认情况下,即使前一次调用仍在运行,安排的命令也会运行。您可以通过添加withoutOverlapping
来防止这种情况。
$shortSchedule->command('artisan-command')->everySecond()->withoutOverlapping();
您还可以添加一些限制。在这里, artisan命令只会在每天上午9:00到下午5:00之间每秒执行一次。
$shortSchedule->command('artisan-command')->between('09:00', '17:00')->everySecond();
包内部的工作原理
该包使用ReactPHP事件循环来安排命令。我录制了一个详细解释包的工作原理的视频,还有一个解释如何测试包的视频。我相信每个人都可以从包的构建方式中学到东西。
这些视频是Laravel包培训的一部分。Laravel包培训课程将教您如何创建高质量的包,并包含了许多其他包的源代码。
观看这些视频的另一种方式是通过成为Spatie的赞助商。《这些》视频都可在spatie.be的视频板块找到。
除了这两个视频,我还录制了一个展示如何使用该包的视频。您可以在哪里查看它
总结一下
您想了解更多关于该包的信息吗?前往GitHub上的读者指南此处。这里有一些未在此博客文章中提到的选项。
这不是我的团队第一次构建的包。您可以查看我们之前开源的这些长长的包列表。
joedixon, driesvints, mltstephane, ovillafuerte94, omarkhaled22, farokr 点赞了这篇文章