cron-eu / cron-jobs
调度任务
Requires
- php: ^7.3 || ^8.0
- typo3/cms-scheduler: ^10.4 || ^11.5 || ^12.4
This package is auto-updated.
Last update: 2024-09-13 12:19:58 UTC
README
通常,您会手动在TYPO3实例中数据库内使用“调度器”后端模块直接维护调度任务。
此扩展允许您通过YAML配置文件管理任务,该文件与数据库保持同步。这样,您可以保持任务版本化、可部署和可重复(即,您可以在wiki中维护一组“维护任务”,以便轻松复制粘贴到新项目中)。
安装
composer require cron-eu/cron-jobs
注意:这既不替代EXT:scheduler,也不会干扰常规调度作业的处理方式。由该扩展创建的任务仍然在数据库中,并在调度器后端模块中显示为常规任务。
它不会触碰手动添加的任务。由cron_jobs管理的任务将被放置在名为“cron_jobs”的单独任务组中。
用法
您可以这样工作
YAML配置
引入了一个新的YAML配置文件:config/scheduler/tasks.yaml
。它看起来像这样
tasks: RefIndex: command: 'referenceindex:update' cronCmd: '0 3 * * *' description: 'Update reference index' CachingFrameworkGarbageCollection: description: 'Garbage collection for caching framework' class: 'TYPO3\CMS\Scheduler\Task\CachingFrameworkGarbageCollectionTask' interval: 180 properties: selectedBackends: - 'TYPO3\CMS\Core\Cache\Backend\SimpleFileBackend' - 'TYPO3\CMS\Core\Cache\Backend\Typo3DatabaseBackend' - 'TYPO3\CMS\Core\Cache\Backend\FileBackend' brofix-checklinks: description: 'Check links for pid=6' command: 'brofix:checklinks' options: start-pages: '6' depth: '' to: 'mail@example.com' dry-run: false send-email: '1' cronCmd: '30 3 1,15 * *' condition: 'applicationContext matches "/Production\\/Live/"'
同步命令控制器
一旦您有了这个文件,您可以调用
bin/typo3 cronjobs:sync
它将在您的数据库中创建定义的任务(表tx_scheduler_tasks
)。
之后,您可以调用此命令,它将保持您的任务与该文件保持同步。因此,只要您保持相同的标识符(在我们的示例中,RefIndex
或CachingFrameworkGarbageCollection
),您就可以更改YAML文件中的设置,同步命令将负责在数据库中更新它。如果您的任务YAML文件中没有更改,数据库中也不会有任何更改。
同步将
- 添加尚未由cron_jobs添加的新任务
- 更新已更改定义的任务(例如,新的cronCmd或选项)
- 删除以前由cron_jobs管理但不再包含在此文件中的任务
重要:请不要在后台模块中手动触摸由cron_jobs管理的任务!
导出命令控制器
如果您已经在您的安装中有了许多尚未由cron_jobs管理的任务,您可以调用此
bin/typo3 cronjobs:export
这将输出一个YAML文件,您可以将它手动添加到您的项目中作为启动(您仍然需要手动从数据库中删除手动创建的任务)。
参考
config/scheduler/tasks.yaml
的语法
期望YAML文件config/scheduler/tasks.yaml
有一个名为tasks:
的根元素。以下是标识符的字典,也将存储在数据库中以供以后查找任务。使用唯一名称,例如任务的缩写名。
选项
class
或command
(这两个中的任何一个都是必需的):调度器中抽象任务的一个完整有效的类名(class
),或标记为schedulable: true
的命令控制器的command
,在Services.yaml中。options
(仅限command
):传递给命令控制器的参数properties
(仅限class
):如果要在任务中设置的属性是公共属性,则可以使用此方法直接设置additionalFields
(仅限class
):传递给任务的字段,与后端模块中使用的字段相同(使用检查器查看它们的名称)。这使用任务的AdditionalFieldProvidercronCmd
或interval
(这两个中的任何一个都是必需的):如调度器后端模块中所述description
(可选):也将显示在后台模块中condition
(可选):如果您希望任务仅根据某些条件(通常是applicationContext
)创建,您可以在常规“condition syntax”中编写一个条件,这种语法也来自网站配置 YAML。