vbouchet31/blt-acquia-cloud-cron-tasks

Acquia Cloud Cron Tasks 管理器,用于 Acquia BLT

1.x-dev 2023-01-26 12:34 UTC

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-updatepost-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.ymlcrons.yml{{application}}.crons.yml。定时任务将根据配置键(在之前的示例中,drupal_cronscheduler 是配置键)合并。

一个高级用例是在同一个代码库中管理多个应用程序。

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 选项可以使这种匹配更宽容,并使覆盖应用于列出的值之一包含在环境名称中的情况。一个例子是一个具有 devdev2dev3 环境的应用程序,并希望将这些环境都应用于覆盖。

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 任务将在 devdev2dev3 环境中禁用。

生产服务器名称

此选项仅适用于属于高级用户的客户端 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 服务器上配置运行。