glooby/task-bundle

为symfony简化任务调度

安装数: 15,434

依赖者: 0

建议者: 0

安全性: 0

星标: 33

关注者: 4

分支: 13

开放问题: 8

类型:symfony-bundle

3.0.0 2019-10-18 08:16 UTC

This package is auto-updated.

Last update: 2024-09-18 18:17:28 UTC


README

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

为Symfony应用程序提供管理调度和执行任务的简单框架。

先决条件

此包需要在服务器上安装cron,以便能够执行计划任务

安装

glooby/task-bundle包添加到composer.json文件中的require部分。

$ composer require glooby/task-bundle ~3.0

将GloobyTaskBundle添加到应用程序的内核

<?php
public function registerBundles()
{
    $bundles = [
        // ...
        new Glooby\TaskBundle\GloobyTaskBundle(),
        // ...
    ];
    ...
}

创建此文件 /etc/cron.d/glooby_scheduler_run

* * * * *  nginx  cd /path/to/project && php bin/console scheduler:run --env=prod &> /dev/null 2>&1

文档

创建可执行任务

要设置一个新的可运行任务,您应遵循以下步骤

实现TaskInterface

示例:src/Glooby/Api/TaskBundle/Task/PingTask.php

    class PingTask implements TaskInterface
    {
        /**
         * @inheritdoc
         */
        public function run(array $params = [])
        {
            return 'pong';
        }
    }

为您的任务添加服务

services:
    glooby_task.ping:
        class: Glooby\TaskBundle\Task\PingTask

尝试通过CLI运行任务

    $ bin/console task:run glooby_task.ping

    "pong"

设置计划任务

要设置一个新的计划,您应遵循以下步骤

使您的服务可运行

按照[创建可执行任务](#Create%20a%20executable%20Task)中的步骤操作

标记服务

通过使用glooby.scheduled_task标记您的服务,它将被视为计划任务

示例

src/Glooby/Api/TaskBundle/Resources/config/services.yml

services:
    glooby_task.ping:
        class: Glooby\TaskBundle\Task\PingTask
        tags:
            - { name: glooby.scheduled_task }

注解您的类

使用此注解注解您的类:Glooby\TaskBundle\Annotation\Schedule

参数
interval

注解的第一个参数默认为interval参数。在此参数中,您配置服务应执行的间隔。

interval是一个包含五个或可选六个子表达式的字符串,描述了计划的详细信息。语法基于Linux cron守护进程定义。

    *    *    *    *    *    *
    -    -    -    -    -    -
    |    |    |    |    |    |
    |    |    |    |    |    + year [optional]
    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7)
    |    |    |    +---------- month (1 - 12)
    |    |    +--------------- day of month (1 - 31)
    |    +-------------------- hour (0 - 23)
    +------------------------- min (0 - 59)

这是唯一必需的参数

use Glooby\TaskBundle\Annotation\Schedule;

/**
 * @Schedule("* * * * *")
 */
class PingTask implements TaskInterface
{

您可以使用以下快捷方式来代替大多数常见用例

use Glooby\TaskBundle\Annotation\Schedule;

/**
 * @Schedule("@hourly")
 */
class PingTask implements TaskInterface
{
params

在调用时应使用的params

use Glooby\TaskBundle\Annotation\Schedule;

/**
* @Schedule("@weekly", params={"wash": true, "flush": 500})
*/
class CityImporter implements TaskInterface
{
active

active参数告诉计划是否应该激活,默认为true

use Glooby\TaskBundle\Annotation\Schedule;

/**
* @Schedule("*/6", active=false)
*/
class PingTask implements TaskInterface
{

同步计划到数据库,每次更新后必须运行此操作

bin/console scheduler:run

运行测试

安装依赖项

$ script/bootstrap

然后,运行测试套件

$ script/test

贡献

CONTRIBUTING文件。

许可证

此包在MIT许可证下发布。请参阅包中的完整许可证:LICENSE.md

www.glooby.com www.glooby.se