micahels/mistletoe

Cron 和单次使用任务管理工具,适用于 PHP。

v0.9.3 2017-05-18 13:58 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:25:39 UTC


README

  • todo: 解析注释过的类
  • 分离进程(可配置)
  • 测试
  • 文档,仓库

Mistletoe (PHP Cron Tasks)

Latest Version Software License Build Status Code Coverage Scrutinizer Code Quality Total Downloads

因为任务管理应该像圣诞节一样……或者至少不那么糟糕!

Mistletoe 提供了一种超级易于使用的方式来管理 PHP 的 cron 任务。只需使用可读性强的流畅构建器添加任务,将一个 cron 任务指向 mt 文件,然后观察魔法发生。

基本用法

在 mistletoe.php 中

$planner = (new Mistletoe\TaskPlanner())
    ->add(\Some\Namespace\UpdateWhatever::class)->always()
    ->add('SomeOtherClass')->daily()->at('00:30')
    ->add(new Mistletoe\Command('gulp clean')->daily()->at('1:00')->onProductionOnly()
    ->add(function(){ echo "do something"; })->every5Minutes();

在你的 crontasks 中,只需添加 /path/to/bin/mt run:due 以执行你想要执行的频率。

完全支持以下功能

  • 将所有 cron 作业简化为单个作业
  • 环境检测和限制(仅在生产中运行特定任务)
  • 任务可以是控制台命令、类或可调用的
  • 流畅的 cron 调度构建器
  • 包含 TaskRunner
  • 轻松创建自定义任务运行器
  • CLI 应用程序
  • 完全可扩展
  • PSR 和 PHP The Right Way 兼容

安装

您可以使用以下三种方式之一使用 mistletoe

作为 Phar(最佳)

您可以从 Phar 下载一个现成的 Box 版本

作为全局 Composer 安装(较好)

当您以这种方式安装了其他工具,如 phpunit 时,这可能是一种最好的方式

$ composer global require michaels/mistletoe --prefer-source

您可能需要将 composer 的 bin 目录添加到您的路径中。

作为 Composer 依赖项(高级)

您还可以将 Mistletoe 作为您的 Composer 管理项目的依赖项安装

$ composer require chrismichaels84/mistletoe

(或)

{
    "require-dev": {
        "chrismichaels84/mistletoe": "~0.9"
    }
}

请注意,使用这种方法需要额外的配置步骤,以防止 Mistletoe 的依赖项与您项目的依赖项冲突。

用法

作为命令行工具

设置的最简单方法是创建一个 mistletoe.php 文件来保存您的 cron 任务。该文件只需返回一个配置完毕并准备就绪的 Mistletoe\TaskPlanner 实例。

$planner = (new Mistletoe\TaskPlanner())
    ->add(\Some\Namespace\UpdateWhatever::class)->always()
    ->add('SomeOtherClass')->daily()->at('00:30')
    ->add(new Mistletoe\Command('gulp clean')->daily()->at('1:00')->onProductionOnly()
    ->add(function(){ echo "do something"; })->every5Minutes();

从那里,您只需使用 cli 命令。Mistletoe 假设默认的 mistletoe.php 在当前工作目录中。您可以为返回 TaskPlanner 实例的任何文件指定相对路径或绝对路径。

例如

  • mt list:all - 假设 mistletoe.php 在此目录中
  • mt list:all /full/path/to/file.php - 将使用完整路径
  • mt list:all ../to/file.php - 将使用相对路径

命令

  • list:all - 列出所有已注册的命令以及有关每个命令的信息
  • list:due - 仅列出此时应执行的命令以及有关每个命令的信息
  • run:due - 执行此时应执行的任何命令
  • run:all - 将强制运行所有已注册的命令
  • run:task Full/Class/Path - 将仅运行该特定任务,无论其是否到期
  • help - 显示此指南

选项

如果将详细程度设置为“verbose”或更高,则将打印额外信息。

mt list:all -v

有关更多信息,请参阅 https://symfony.com.cn/doc/current/components/console/introduction.html#verbosity-levels

设置 TaskPlanner

配置文件只需返回一个配置好的TaskPlanner实例。有几种方法可以轻松设置它。更多选项,请参阅Mistletoe\TaskPlanner

注意:至少需要一个add()方法。

$planner = (new TaskPlanner())
    ->setTaskRunner(new CustomTaskRunner()) // Optional: Must implement Mistletoe\Contracts\TaskRunnerInterface
    ->setCurrentEnvironment('development') // Optional
    
    // Add a simple task to run every minute
    ->add('SomeClass')->always()

    // Add Tasks as Classes, Console Commands, or Callables
    ->add(SomeClass::class)->always()
    ->add(new Mistletoe\Command('curl http://google.com/')->always()
    ->add(function () { echo 'something' })->always()
    ->add(new CustomTask())->always() // implements RunnableInterface

    // Add Tasks in a Chain, also as class, command, or callable
    ->add(SomeClass::class)->always()->followedBy('SomeOtherClass')

    // Only run on certain environments
    ->add(SomeClass::class)->always()->onProductionOnly()
    ->add(SomeClass::class)->always()->onDevelopmentOnly()
    ->add(SomeClass::class)->always()->onEnvironment('SomethingCustom')

    // Give it a specific cron schedule
    ->add('SomeTask)->schedule('* 10 * 5 3')

    // Use the Fluent Builder to control scheduling
    ->add('SomeTask)->yearly()->onMonth(6)->onDay(16)
    ->add('SomeTask)->monthly()->onDay(21)
    ->add('SomeTask)->weekly()->onMonday()
    ->add('SomeTask')->daily()->at('1:00')
    ->add('SomeTask')->hourly()->atMinute(10)->andAtMinute(55)
    ->add('SomeTask)->every3Hours() // every{X}Hours()
    ->add('SomeTask)->every22Minutes()
    ->add('SomeTask)->daily()->atMidnight()j
    ->add('SomeTask)->daily()->atHour(7)->andAtHour(12)
    
    // And Mix and Match to your hearts content...
return $planner;

变更日志

请参阅CHANGELOG以获取最近更改的更多信息。

测试

$ composer test

贡献

请参阅CONTRIBUTINGCONDUCT以获取详细信息。

安全

如果您发现任何与安全相关的问题,请通过电子邮件::author_email联系,而不是使用问题跟踪器。

致谢

许可证

MIT许可证(MIT)。更多信息请参阅许可证文件