vbouchet31 / blt-acquia-cloud-cron-tasks
Acquia Cloud Cron Tasks 管理器,用于 Acquia BLT
Requires
- typhonius/acquia-php-sdk-v2: ^2.0.0
Requires (Dev)
- acquia/blt: ^13
This package is auto-updated.
Last update: 2024-09-26 16:23:11 UTC
README
这是一个 Acquia BLT 插件,提供管理 Acquia Cloud 上 cron 任务的命令。
此插件是由社区创建和社区支持的。Acquia 不为此软件提供任何直接支持,也不提供任何关于其稳定性的保证。
快速入门
要在现有的 BLT 项目上使用此插件,请使用 Composer 安装插件
composer require vbouchet31/blt-acquia-cloud-cron-tasks
此插件利用 Acquia Cloud API。插件将在 HOME 目录中查找名为 acquia_cloud_api_creds.php
的文件,该文件应包含 客户端 ID 和密钥。以下是文件格式,以便插件可以加载它
<?php $_clientId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx'; $_clientSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
生成客户端 ID 和密钥的用户必须具有管理所有环境的 cron 任务的权限,以便插件可以正常工作。
在你的 blt.yml
文件中,创建一个新的部分
crons: tasks: drupal_cron: label: "Drupal cron" command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot cron" frequency: "0 * * * *"
运行 blt acquia-cloud-cron-tasks:update {{application}} {{environment}}
以同步 blt.yml
中配置的 cron 任务和 Acquia Cloud 上配置的预定任务。(例如,使用 blt acquia-cloud-cron-tasks:update customer dev
来同步 customer
应用程序的 dev
环境上的 cron 任务。)运行此命令将
- 删除 Acquia Cloud 上配置但在
blt.yml
中未配置的预定任务。 - 更新 Acquia Cloud 和
blt.yml
之间不同的预定任务。映射基于任务的标签。 - 创建在
blt.yml
中但在 Acquia Cloud 上未配置的任务。
配置中列出的任务与 Acquia Cloud 上安装的任务之间的映射是通过标签完成的。
此命令可以从本地机器执行,也可以添加到 post-code-update
或 post-code-deploy
云钩 中。使用第二种选项,每次代码更改都会自动同步 cron 任务。
高级用法
BLT 命令选项
--no-delete
:Acquia Cloud 上不会删除任何预定任务。只会执行更新和创建操作。如果你只想通过 UI 管理一些任务,可以使用此选项。
--dry-run
:Acquia Cloud 上不会采取任何操作。它只会提示一个详细列表,显示将创建、更新或删除的任务,而不使用此选项。
$ blt acct:up my_app prod --dry-run
[warning] This will be a dry run, scheduled tasks will not be altered.
[notice] Existing scheduled task "Drupal cron" (xxxxxx-xxxx-xxxx-xxxxxxxx) will be edited with the following config:
[notice] Command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot cron"
[notice] Frequency: "0 * * * *" (Previously "* * * * *")
[notice] Status: Enabled
覆盖
可能存在这样的情况,即 cron 任务的配置必须根据环境略有不同。一个基本的例子是,任务在生产环境中每分钟运行一次,但在其他环境中只每 10 分钟运行一次,以节省服务器资源。以下是一个示例
crons: tasks: scheduler: label: "Scheduler" command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot scheduler:cron" frequency: "*/10 * * * *" overrides: - environments: - prod frequency: "* * * * *"
如果对环境有多个覆盖,它们将按配置中列出的顺序应用
crons: tasks: scheduler: label: "Scheduler" command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot scheduler:cron" frequency: "*/10 * * * *" overrides: - environments: - prod frequency: "* * * * *" - environments: - prod - uat command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot scheduler:cron &>> scheduler.log"
在这个例子中,prod 环境将具有 * * * * *
频率,并将命令结果记录在 scheduler.log
中。
YAML 文件分割
为了避免由于许多定时任务而使 blt.yml
文件过长,可以将配置拆分为 crons.yml
和/或 {{application}}.crons.yml
文件。甚至可以同时使用所有这些文件。文件的加载顺序如下:blt.yml
,crons.yml
和 {{application}}.crons.yml
。定时任务将根据配置键(在之前的示例中,drupal_cron
和 scheduler
是配置键)合并。
一个高级用例是在同一个代码库中管理多个应用程序。
crons.yml
crons: tasks: drupal_cron: label: "Drupal cron" command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot cron" frequency: "0 * * * *"
application1.crons.yml
crons: tasks: drupal_cron: frequency: "5 * * * *" queue_run: label: "Queue run" command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot queue:run queue_name" frequency: "*/10 * * * *"
application2.crons.yml
crons: tasks: drupal_cron: frequency: "10 * * * *"
使用此配置,在 application1 上每小时执行一次 drush cron
命令,在 application2 上每小时执行一次,在任何其他应用程序上每小时执行一次。Application1 将有一个额外的 Queue run
计划任务。
任务状态
默认情况下,所有任务都是启用的。可以使用 status: 0
来禁用。相同的属性也可以用来避免在一个环境中安装任务,例如使用 status: -1
。
crons: tasks: drupal_cron: label: "Drupal cron" command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot cron" frequency: "0 * * * *" overrides: - environments: - dev status: 0 - environments: - test status: -1
在此示例中,开发环境中的 Drupal cron
任务将被禁用,测试环境中将完全不配置,而在其他环境中将启用。
附加选项
覆盖匹配
默认情况下,覆盖的名称匹配对环境是严格的。只有当环境被明确列出时,覆盖才适用。overrides-environments-contains: true
选项可以使这种匹配更宽容,并使覆盖应用于列出的值之一包含在环境名称中的情况。一个例子是一个具有 dev
,dev2
,dev3
环境的应用程序,并希望将这些环境都应用于覆盖。
crons: overrides-environments-contains: true tasks: drupal_cron: label: "Drupal cron" command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot cron" frequency: "0 * * * *" overrides: - environments: - dev status: 0
在此示例中,Drupal cron
任务将在 dev
,dev2
和 dev3
环境中禁用。
生产服务器名称
此选项仅适用于属于高级用户的客户端 id 和 secret。它允许指定在哪个 Web 服务器上执行生产环境中的定时任务。默认情况下,定时任务将在应用程序的任何 Web 服务器上执行。一些复杂的应用程序,需要许多或重量级的定时任务,可以排除一个 Web 服务器不参与负载均衡器的轮询,并仅用于执行定时任务。
crons: server: web-1111 tasks: drupal_cron: label: "Drupal cron" command: "/usr/local/bin/drush -r /var/www/html/${AH_SITE_NAME}/docroot cron" frequency: "0 * * * *"
在此示例中,Drupal cron
将在 prod 环境的 web-1111
服务器上配置运行。