stekycz/cronner

此包已被废弃且不再维护。作者建议使用 bileto/cronner 包。

简单的工具,用于维护cron任务。

安装次数: 68,153

依赖: 0

推荐者: 0

安全性: 0

星标: 75

关注者: 10

分支: 15

开放问题: 8

类型:nette-addon

v3.0.0 2021-12-25 11:57 UTC

README

描述

简单的工具,用于维护cron任务。

它需要 PHP >= 8.0Nette Framework >= 3.0

使用方法

使用它非常简单,因为配置仅在方法注解中。以下是一个带有任务的示例类。

class CronTasks
{
    /**
     * @cronner-task E-mail sending
     * @cronner-period 1 day
     * @cronner-days working days
     * @cronner-time 23:30 - 05:00
     */
    public function sendEmails(): void
    {
        // Code which sends all your e-mails
    }


    /**
     * @cronner-task Important data replication
     * @cronner-period 3 hours
     */
    public function replicateImportantData(): void
    {
        // Replication code
    }
}

建议使用编译器扩展。

extension:
    cronner: Bileto\Cronner\DI\CronnerExtension

它不需要任何配置,但是您自己的时间戳存储实现可能比默认存储更好。您的存储必须在 config.neon 中定义为一个服务,Cronner 将找到它。但是,如果您无法自动注入服务,您可以手动指定服务。

cronner:
    timestampStorage: myCoolTimestampStorage

或者,您可以更改默认存储的目录。

cronner:
    timestampStorage: Bileto\Cronner\TimestampStorage\FileStorage(%wwwDir%/../temp/cronner)

您还可以为 Cronner 定义 maxExecutionTime,这样您就不必自己编写代码(可能对您的所有请求都如此)。选项 criticalSectionTempDir 可以更改,但是目录必须对 php 进程可写。它用于在每次运行每个任务时。

最后,您需要指定您的任务对象。这可能是某个服务。您可以将标签 cronner.tasks 添加到所有具有 Cronner 任务的服务的服务上,这些服务将被自动绑定。但是,您仍然可以使用 addTasks 方法添加新的任务对象。

然后您可以在 Presenter 中非常容易地使用它

class CronPresenter extends \Nette\Application\UI\Presenter
{
    /**
     * @var \Bileto\Cronner\Cronner
     * @inject
     */
    public $cronner;

    
    public function actionCron(): void
    {
        $this->cronner->run();
    }
}

或在 Kdyby/ConsoleCommand 中。

服务配置也是可能的,但是 不应 在 Nette 的新版本中使用,因为建议使用扩展,这是首选方式。但是,您仍然需要在您的 Presenter 或控制台 Command 中的某个地方调用 run 方法。

services:
    cronner: Bileto\Cronner\Cronner(Bileto\Cronner\TimestampStorage\FileStorage(%wwwDir%/../temp/cronner))
    setup:
    	- addTasks(new CronTasks())

注解

@cronner-task

此注解 必需 用于所有应作为任务使用的公共方法。它的值用作任务的名称。如果值不存在,则名称由类名和方法名构建。

如果此注解在任务方法的注释中为 Cronner 单个(对于 Cronner),则任务将在 Cronner 运行时每次运行。

注意: 不可用魔法方法作为任务(例如 __construct__sleep 等)。

示例

/**
 * @cronner-task Fetches all public data from all registered social networks
 */

@cronner-period

不强制要求但建议的注释,用于指定任务执行周期。周期是两次执行任务之间的最短时间。其值可以是strtotime()函数接受的任何内容。唯一的限制是时间前不能有"+"符号,因为Cronner会自动添加。所以本月的第一个工作日不可接受,然而1个月是可接受的。

注意!此注释的值不得包含任何符号(+或-)。

示例

/**
 * @cronner-period 1 day
 */

@cronner-days

允许只在指定的天运行任务。可能的值是星期名称的缩写。这意味着Mon(星期一),Tue(星期二),Wed(星期三),Thu(星期四),Fri(星期五),Sat(星期六)和Sun(星期日)。有两个简写以提高易用性:工作日MonTueWedThuFri)和周末SatSun),它们内部扩展为特定的日期。多个值必须用逗号分隔(Mon, Wed, Fri)或可以用范围指定(Mon-Thu)。

示例

/**
 * @cronner-days working days, Sun
 */

@cronner-time

指定任务可以运行的时间段(或多个时间段)。它可以是一个范围或一个具体的分钟数。它使用24小时制。多个值必须用逗号分隔。

时间可以定义在午夜,如下例所示。

注意:如果前一次运行因任何原因启动较慢,则运行任务会有5秒的容忍时间,以便尽可能快地运行。

示例

/**
 * @cronner-time 11:00, 23:30 - 05:00
 */