[扩展推荐] Laravel 中的秒级计划任务和无 Cron 计划任务
Spatie 团队围绕计划任务发布了两个新扩展包: laravel-cronless-schedule 和 laravel-short-schedule。尽管这两个扩展包具有不同的使用情形,但它们之间的相关性足以让我们在一篇文章中进行分享。
通常,原生 Laravel 调度就可以为大多数应用程序提供足够的灵活性,但是,当你需要运行的计划任务的频率超过每分钟时,这些扩展包就可以提供更出色的开发流程和一些高级功能。
不需要 Cron 的计划任务
laravel-cronless-schedule
扩展包使用了 ReactPHP 循环来运行无需 cron 的计划任务。如果你在本地开发,那么无需事先设置 cron 定时任务,而只用运行如下命令就可以开启计划任务了:
php artisan schedule:run-cronless
根据文档描述,“此命令将永远不会结束。 它将在后台每分钟执行一次 php artisan Schedule
。”
Freek Van der Herten在他的博客文章中解释说,一种无需依赖cron即可运行Laravel调度程序的软件包, 为什么要考虑在开发工作流程中使用此软件包:
如果要在本地环境中每分钟运行一次计划任务,使用 cron 可能很麻烦。 我敢打赌,大多数开发人员永远都不会碰他们本地环境的 crontab。所以推出了它,可以很好地运行,但是它不像运行 artisan 命令那样简单 spatie/laravel-cronless-schedule 提供。
在Windows上,甚至不存在cron(我不是专家,但是您应该在其中使用Windows Scheduler)。 在Docker容器上,cron通常不可用。
该软件包避免了所有特定于平台的调度问题,并且还包含一些有用的参数:
# 每五秒运行一次
php artisan schedule:run-cronless --frequency=5
# 运行一个自定义命令
php artisan cronless-schedule:run --command=your-favorite-artisan-command
# 5秒后停止运行
php artisan cronless-schedule:run --stop-after-seconds=5
顺便说一句,我写了关于 在Docker上运行Laravel Scheduler和Queue,该命令在单独的容器中运行 scheduler 命令。 但是,如果要在开发中选择性地运行定时任务 docker 容器,可能会很痛苦。
您可以在GitHub上 spatie/laravel-cronless-schedule 找到laravel-cronless-schedule 的源代码。
Laravel 秒级定时任务
Spatie 发布的第二个软件包是 laravel-short-schedule,它可以在秒级频率下运行 Laravel 调度程序。 与 cronless-schedule 程序包类似,它使用ReactPHP 事件循环。
这是您可以通过在应用程序的控制台内核类上定义 shortSchedule()
方法来使用此程序包的示例:
use \Spatie\ShortSchedule\ShortSchedule;
protected function shortSchedule(ShortSchedule $shortSchedule)
{
// 此命令每秒钟会运行一次
$shortSchedule->command('artisan-command')->everySecond();
// 此命令每30秒会运行一次
$shortSchedule->command('another-artisan-command')->everySeconds(30);
// 此命令每0.5秒会运行一次
$shortSchedule->command('another-artisan-command')->everySeconds(0.5);
}
像原生 Laravel 调度程序一样,您可以将命令调度为两次运行,并在任务仍在运行时避免任务重叠。
您可以通过查看 Freek 的博客文章来了解有关此软件包的更多信息:用于秒级定时任务运行 Artisan 命令的软件包. 。 您可以在GitHub上的源代码中找到 spatie/laravel-short-schedule。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: