helhum/typo3-crontab

TYPO3控制台命令和TYPO3调度任务的高级调度

安装次数: 37,017

依赖项: 0

建议者: 0

安全: 0

星级: 31

观察者: 14

分支: 8

开放问题: 8

类型:typo3-cms-extension

v0.6.2 2023-01-09 15:27 UTC

This package is auto-updated.

Last update: 2024-09-09 19:19:10 UTC


README

免责声明

此包的目的是在某个时刻取代TYPO3调度扩展的当前功能。它处于早期开发阶段,这意味着并非所有功能(特别是在UI方面)都已实现,但已实施的功能已知可以可靠运行。此包目前在Windows环境中无法工作,因为没有提供POSIX函数(如 posix_getpgid),这些函数是检查进程是否实际运行所必需的。

主要功能

  • 任务通过配置进行配置,因此可以作为代码部署。
  • 除了常规调度任务外,任何TYPO3控制台命令和任何shell脚本都可以添加为任务。
  • 任务在UI中显示为运行状态时,始终反映进程的实际状态。不再标记因错误崩溃而未运行的任务。
  • 通过UI停止任务实际上停止了进程,而不仅仅是将其标记为未运行。
  • 执行计划任务的crontab命令(crontab:run)可以可选地作为长时间运行的进程,持续寻找要执行的任务(选项 --timeout),并允许并行执行不同的到期任务(选项 --forks)。
  • 如果任务失败,可以配置任务以重新安排为立即执行。

安装

  1. 将扩展添加到您的TYPO3项目中:composer require helhum/typo3-crontab
  2. 配置系统cron以运行命令:/path/to/vendor/bin/typo3cms crontab:run
  3. 在您的TYPO3配置文件中配置任务

配置命令(和调度任务)的调度

配置调度完全是通过配置(即 TYPO3_CONF_VARS)完成的,通常在 LocalConfiguration.phpAdditionalConfiguration.php

这意味着

  1. 扩展也可以添加任务(通过 ext_localconf.php 文件)
  2. 可以在不同的环境中添加不同的任务(通过为不同的环境提供不同的配置)
  3. 在所有环境中部署相同的任务

示例(以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或任何其他渠道与我联系。