basecom / akeneo-cron-ui
此包提供了管理 Akeneo 中 Cron 作业的 UI
Requires
- akeneo-labs/custom-entity-bundle: ^2.4
- akeneo/pim-community-dev: ^2.3
- cocur/background-process: ^0.7.0
- dragonmantank/cron-expression: ^2.2
- tightenco/collect: ^5.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
This package is auto-updated.
Last update: 2024-07-17 23:50:15 UTC
README
basecom CronUI 是 Akeneo 社区和企业版的扩展。它添加了一个新的用户界面,可用于创建、管理和删除 cron 作业。此外,它允许开发者通过代码创建 cron 作业。
目录
- 安装
1.1 要求
1.2 安装包 - 使用
2.1 在代码中定义 cron 作业
2.1.1 Symfony 命令
2.1.2 Akeneo 作业
2.2 注册 cron 作业
2.3 在 UI 中定义 cron 作业 - 贡献
- 作者
- 许可
安装
要求
此包需要 Akeneo 4.0.33 社区版 或更高版本。它还需要 PHP 7.1 或更高版本。
安装包
- 使用 composer 安装此包
composer require basecom/akeneo-cron-ui
-
如果尚未安装,请遵循 Custom entity bundle 的安装步骤。
-
将包添加到
bundles.php
return [ \Basecom\Bundle\CronUiBundle\BasecomCronUiBundle::class => ['all' => true], ];
- 运行 doctrine 模式更新以创建新的 cron 作业表
php ./bin/console doctrine:schema:update --dump-sql --env=prod php ./bin/console doctrine:schema:update --force --env=prod
- 将
cronjobs:run
命令添加到 crontab
* * * * * cd /path-to-your-project && php ./bin/console cronjobs:run >> /dev/null 2>&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
接口。该接口包含三个方法: getCronExpression、execute 和 getLabel。getCronExpression 方法可以接受任何有效的 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
。
创建后,将自动打开此新cron任务的编辑页面。在那里,您可以定义cron表达式。您可以在手动输入和预定义表达式之间切换。您可以使用任何默认的cron表达式。
贡献
如果您需要帮助或想要提问,请打开一个issue。如果您发现了一个错误或有功能请求,请也打开一个issue。
我们欢迎每个人创建Pull Requests并讨论新想法。
如果您发现了一个与安全相关的错误,请通过电子邮件发送详细信息到j.kniest@basecom.de
作者
核心团队
许可
版权所有 basecom GmbH & Co. KG
在此特此授予任何获得此软件及其相关文档文件(“软件”)副本的人(“个人”)无限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许软件的提供者这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性的保证。在任何情况下,作者或版权所有者都不对任何索赔、损害或其他责任(无论是基于合同、侵权或其他方式)负责,这些索赔、损害或其他责任源于、产生于或与软件或其使用或其他交易有关。