helhum /typo3-crontab
TYPO3控制台命令和TYPO3调度任务的高级调度
Requires
- dragonmantank/cron-expression: ^2.3
- helhum/typo3-console: ^7
- typo3/cms-core: ^11.5
- typo3/cms-extbase: ^11.5
Suggests
- typo3/cms-scheduler: To be able to execute TYPO3 scheduler tasks
README
免责声明
此包的目的是在某个时刻取代TYPO3调度扩展的当前功能。它处于早期开发阶段,这意味着并非所有功能(特别是在UI方面)都已实现,但已实施的功能已知可以可靠运行。此包目前在Windows环境中无法工作,因为没有提供POSIX函数(如 posix_getpgid
),这些函数是检查进程是否实际运行所必需的。
主要功能
- 任务通过配置进行配置,因此可以作为代码部署。
- 除了常规调度任务外,任何TYPO3控制台命令和任何shell脚本都可以添加为任务。
- 任务在UI中显示为运行状态时,始终反映进程的实际状态。不再标记因错误崩溃而未运行的任务。
- 通过UI停止任务实际上停止了进程,而不仅仅是将其标记为未运行。
- 执行计划任务的crontab命令(
crontab:run
)可以可选地作为长时间运行的进程,持续寻找要执行的任务(选项--timeout
),并允许并行执行不同的到期任务(选项--forks
)。 - 如果任务失败,可以配置任务以重新安排为立即执行。
安装
- 将扩展添加到您的TYPO3项目中:
composer require helhum/typo3-crontab
- 配置系统cron以运行命令:
/path/to/vendor/bin/typo3cms crontab:run
- 在您的TYPO3配置文件中配置任务
配置命令(和调度任务)的调度
配置调度完全是通过配置(即 TYPO3_CONF_VARS
)完成的,通常在 LocalConfiguration.php
或 AdditionalConfiguration.php
中
这意味着
- 扩展也可以添加任务(通过
ext_localconf.php
文件) - 可以在不同的环境中添加不同的任务(通过为不同的环境提供不同的配置)
- 在所有环境中部署相同的任务
示例(以yaml表示法)
EXTCONF: crontab: update_refindex: group: 'Demo' multiple: false retryOnFailure: false title: 'Updates reference index' cron: '*/30 * * * *' process: type: command command: cleanup:updatereferenceindex arguments: - '--quiet' - '--no-interaction' shell_script: group: 'Demo' multiple: false retryOnFailure: true title: 'Executing a shell script' description: 'Path relative to composer root or absolute' cron: '*/12 * * * *' process: type: script script: res/scripts/test.sh arguments: - 'foo' php_script: group: 'Demo' multiple: false retryOnFailure: false title: 'Executing a php script' description: '"@php" placeholder can be used to reference the PHP binary used by the crontab:run command' cron: '*/42 * * * *' process: type: script script: '@php res/scripts/test.php' arguments: - 'bar' test: group: 'Demo' multiple: true retryOnFailure: false description: 'Just for demo purposes' cron: '*/1 * * * *' process: type: scheduler className: TYPO3\CMS\Scheduler\Example\TestTask arguments: email: test@test.test solr_indexer: group: 'Demo' multiple: false retryOnFailure: false description: 'Run early, run often' cron: '*/5 * * * *' process: type: scheduler className: ApacheSolrForTypo3\Solr\Task\IndexQueueWorkerTask arguments: site: 1 documentsToIndexLimit: 20 forcedWebRoot: null
当前状态
- 没有用户界面可以添加或删除任务。您必须手动提供配置。
- TYPO3控制台是硬性要求
- 此扩展仅适用于Composer安装。不支持非Composer模式的TYPO3。
- 没有计划任务的开始时间和结束时间。如果您有这种要求,
- 执行计划任务的命令是
crontab:run
,您可以在crontab:schedule
命令周围构建一些自动化,以在适当的时间启用/禁用任务。
概念(特别是与TYPO3调度相关)
一切都是命令或脚本
此扩展的主要目的是按定期计划在后台执行不同的工作单元。类似于Unix crontab,一个工作单元限制为TYPO3控制台命令或shell脚本。为了提供向后兼容性,调度任务被包装在一个特殊命令中,这样它们也可以用作工作单元。因此,任何在TYPO3控制台中可用作命令的命令以及任何shell脚本都将是一个有效的计划工作单元。是否需要计划特定的命令,由您自己决定。
只是一个crontab
与Unix crontab一样,没有定义开始或结束时间或设置工作单元仅执行一次的可能性。
可以配置要计划执行的命令,但将其从常规计划执行中删除。类似于向您的crontab中添加命令但将其注释掉,以便忽略。
此类命令将在UI上显示为“禁用”。在目标系统上的首次部署中,所有配置的命令都是禁用的,必须启用才能进行计划,无论是通过UI还是使用crontab:schedule
命令。
安全考虑
由于从概念上讲可以执行任何TYPO3控制台命令,因此很明显,有权访问此模块的用户必须被视为有权访问完整的TYPO3安装(系统管理员)以及在一定程度上也有权访问底层操作系统。这与访问扩展管理器(允许集成PHP代码)或安装工具(可以在其中创建管理员用户)类似。
贡献
每一项贡献都很宝贵。请检查并测试它,通过创建功能请求或建议提供反馈,创建带有更改建议的拉取请求,通过Twitter或任何其他渠道与我联系。