[扩展推荐] Laravel 中的秒级计划任务和无 Cron 计划任务

Laravel

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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/sub-minute-and-...

译文地址:https://learnku.com/laravel/t/46021

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 10

可以用于生产环境么

5个月前 评论
xin6841414

这个可以

5个月前 评论

Spatie 怎么盈利,,,

这个插件需要 PHP7.4,,,

5个月前 评论

supervisor守护进程试试

5个月前 评论
ibucoin

用pm2更方便啊

5个月前 评论

Package spatie/laravel-cronless-schedule at version has a PHP requirement incompatible with your PHP version (7.2.24)

很尴尬 安装不了

5个月前 评论
beatles 4个月前

不支持windows吧

4个月前 评论
JackZhang 1个月前

用这个没啥意思吧,本身还得守护起来。

3个月前 评论

这个执行 如何监听错误消息呢

2周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!