basecom / akeneo-cron-ui

此包已被弃用且不再维护。未建议替代包。

此包提供了管理 Akeneo 中 Cron 作业的 UI

安装: 36

依赖项: 0

建议者: 0

安全: 0

星级: 5

关注者: 4

分支: 0

开放问题: 2

类型:symfony-bundle

v1.0.0 2018-11-27 08:17 UTC

This package is auto-updated.

Last update: 2024-07-17 23:50:15 UTC


README

basecom CronUI 是 Akeneo 社区和企业版的扩展。它添加了一个新的用户界面,可用于创建、管理和删除 cron 作业。此外,它允许开发者通过代码创建 cron 作业。

目录

  1. 安装
    1.1 要求
    1.2 安装包
  2. 使用
    2.1 在代码中定义 cron 作业
    2.1.1 Symfony 命令
    2.1.2 Akeneo 作业
    2.2 注册 cron 作业
    2.3 在 UI 中定义 cron 作业
  3. 贡献
  4. 作者
  5. 许可

安装

要求

此包需要 Akeneo 4.0.33 社区版 或更高版本。它还需要 PHP 7.1 或更高版本。

安装包

  1. 使用 composer 安装此包
composer require basecom/akeneo-cron-ui
  1. 如果尚未安装,请遵循 Custom entity bundle 的安装步骤。

  2. 将包添加到 bundles.php

return [
    \Basecom\Bundle\CronUiBundle\BasecomCronUiBundle::class => ['all' => true],
];
  1. 运行 doctrine 模式更新以创建新的 cron 作业表
php ./bin/console doctrine:schema:update --dump-sql --env=prod
php ./bin/console doctrine:schema:update --force --env=prod
  1. cronjobs:run 命令添加到 crontab
* * * * * cd /path-to-your-project && php ./bin/console cronjobs:run >> /dev/null 2>&1
  1. 清除所有缓存并重新生成前端资源
php ./bin/console cache:clear --env=prod --no-warmup
php ./bin/console cache:warmup --env=prod
php ./bin/console pim:installer:assets --clean --env=prod
yarn run webpack

使用

创建 cron 作业有两种方式。您可以通过用户界面创建它们,也可以在代码中定义它们。通过代码创建它们的优点是您可以执行常规 PHP 代码。用户界面中定义的 cron 作业可以执行任何 shell 命令,包括但不限于 Symfony 命令

在代码中定义 cron 作业

每个 cron 作业都需要实现 Cronjob 接口。该接口包含三个方法: getCronExpressionexecutegetLabelgetCronExpression 方法可以接受任何有效的 cron 表达式,包括 @daily@monthly 等。您可以在此处了解更多有关 cron 表达式的信息:这里execute 方法可以运行任何 PHP 代码。getLabel 方法仅用于日志记录目的,永远不会在用户界面中显示。

以下是一个非常基本的 cron 作业示例,该作业使用 curl 获取特定的 URL

<?php

use Basecom\Bundle\CronUiBundle\CronAction\Cronjob;

class CurlCronjob implements Cronjob
{
    public function getCronExpression(): string
    {
        return '*/5 * * * *'; // Every five minutes
    }

    public function execute(): bool
    {
        $ch = curl_init('https://example.com');
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_TIMEOUT,10);
        $output = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        return $httpcode === 200; // Return true, if the status code is 200
    }

    public function getLabel(): string
    {
        return 'curl example.com';
    }
}

除了接口之外,还有多个抽象类可用于特定目的(例如运行 symfony 命令或 akeneo 作业)。如果您的 cron 作业扩展了这些类之一,则无需手动实现接口,因为这些类已经实现了。

Symphony 命令 (CommandCronjob)

此抽象类可用于执行任何 symfony / akeneo 命令。以下是一个基本示例,每小时运行一次 "schema:update" 命令。

<?php

use Basecom\Bundle\CronUiBundle\CronAction\CommandCronjob;

class SchemaUpdateCronjob extends CommandCronjob
{
    public function getCommand(): string
    {
        // This is the command which should be executed.
        // If you would run it manually: ./bin/console {command_name}
        return 'doctrine:schema:update';
    }

    public function getCommandParams(): array
    {
        // You don't need to override this method if you don't have specific parameters
        return [
            '--force',
            '--env' => 'prod'
        ];
    }

    public function getCronExpression(): string
    {
        // You can use simple aliases like '@hourly', '@daily' and so on..
        return '@hourly';
    }
}

阿克诺任务(JobCronjob)

最后一个抽象类允许执行阿克诺的导入和导出任务。它可以接受额外的参数(如filePath)并运行任务。所有任务都将自动放入默认的阿克诺队列。

<?php

use Basecom\Bundle\CronUiBundle\CronAction\JobCronjob;

class ExportProductsCronjob extends JobCronjob
{
    public function getJobName(): string
    {
        // This is the code / name of the akeneo job which should be executed.
        return 'csv_product_export';
    }

    public function getJobParams(): array
    {
        // This method must not be overriden if you don't need to override parameters.
        return [
            'filePath' => '/home/akeneo/my-daily-export/example.csv'
        ];
    }

    public function getCronExpression(): string
    {
        // The interface has some predefined constants for expression which are often used.
        return static::DAILY;
    }
}

注册cron任务

要注册您创建的cron任务(无论您使用的是哪个接口和类),您只需要将cron任务注册为服务,并标记为:basecom.cronjob。这是一个示例,说明如何在resources/config/cronjobs.yml中注册ExportProductsCronjob

parameters:
    basecom.cronjobs.export-products.class: 'Basecom\Bundle\SampleCronjobBundle\Cronjobs\ExportProductsCronjob'

services:
    basecom.cronjobs.export-products:
        class: '%basecom.cronjobs.export-products.class%'
        arguments:
        - '%kernel.root_dir%'
        tags:
        - { name: 'basecom.cronjob' }

symfony和akeneo cron任务要求您将内核根目录作为第一个参数传递。这用于找到正确的./bin/console文件来执行命令。当然,您可以为您的自定义cron任务传递更多参数。symfony编译器将自动找到所有带有标签basecom.cronjob的已注册cron任务。

在UI中定义cron任务

还可以通过akeneo的UI注册cron任务。如果您的一些cron任务在不同的应用程序阶段(例如,测试、实时等)之间不同,这将非常有用。要注册新的cron任务,请在UI中导航到设置 > Cron任务

要添加新的cron任务,只需按下创建按钮,并填写一个唯一的代码和命令。每个命令都是相对于您的安装根目录的。因此,您可以定义如下命令:./bin/console some:akeneo:command

Create window

创建后,将自动打开此新cron任务的编辑页面。在那里,您可以定义cron表达式。您可以在手动输入和预定义表达式之间切换。您可以使用任何默认的cron表达式

Create window

贡献

如果您需要帮助或想要提问,请打开一个issue。如果您发现了一个错误或有功能请求,请也打开一个issue

我们欢迎每个人创建Pull Requests并讨论新想法。

如果您发现了一个与安全相关的错误,请通过电子邮件发送详细信息到j.kniest@basecom.de

作者

basecom GmbH & Co. KG

核心团队

许可

版权所有 basecom GmbH & Co. KG

在此特此授予任何获得此软件及其相关文档文件(“软件”)副本的人(“个人”)无限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许软件的提供者这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性的保证。在任何情况下,作者或版权所有者都不对任何索赔、损害或其他责任(无论是基于合同、侵权或其他方式)负责,这些索赔、损害或其他责任源于、产生于或与软件或其使用或其他交易有关。