支持 Laravel.io 的持续发展 →

一个用于在子分钟频率下安排 Artisan 命令的包

2020年6月24日 阅读时间:2分钟 阅读人数:140

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上的读者指南此处。这里有一些未在此博客文章中提到的选项。

这不是我的团队第一次构建的包。您可以查看我们之前开源的这些长长的包列表

最后更新1年前。

joedixon, driesvints, mltstephane, ovillafuerte94, omarkhaled22, farokr 点赞了这篇文章

6
喜欢这篇文章吗?让作者知道并给他们鼓掌!

您可能还喜欢的其他文章

2024年3月11日

如何使用Larastan将您的Laravel应用程序从0到9

多亏了Larastan,在应用程序被执行之前发现错误变得可能,因为它...

阅读文章
2024年7月19日

无需特性即可规范API响应

我注意到,大多数用于API响应的库都是使用特性编写的,并且...

阅读文章
2024年7月17日

通过Discord通知在您的Laravel项目中收集反馈

如何在Laravel项目中创建一个反馈模块并在收到消息时收到Discord通知...

阅读文章

感谢这些惊人的公司 对我们的支持

这里也可以放置您的标志?

Laravel.io

Laravel portal for problem solving, knowledge sharing and community building.

© 2024 Laravel.io - 版权所有。