我想创建一个在现有 Elastic Beanstalk 环境中所有 EC2 实例上执行自定义脚本的 cron 定时任务。该怎么办?

您可以使用 .ebextensions 创建将在 Elastic Beanstalk 环境中所有 EC2 实例上运行的 cron 作业。在 Beanstalk 应用程序 zip 文件中创建一个名为“.ebextensions”的目录,其中包含将应用程序部署到实例时要读取和执行的配置文件。

以下步骤添加一个在 Elastic Beanstalk 环境中所有 EC2 实例上同时执行的 cron 定时任务。

注意:如果是只需在一个实例上执行的定期任务,请考虑改用工作线程套餐定期任务

创建 .ebextensions 目录结构

在 Elastic Beanstalk 应用程序 zip 文件中创建一个名为“.ebextensions”的目录。在以下示例中,Elastic Beanstalk 应用程序 zip 文件命名为“myapp.zip”,配置文件命名为“cronjob.config”。

注意:您可以为配置文件取任意名称,但如果 .ebextensions 目录中存在多个配置文件,它们将按字母顺序执行。

以下示例说明了应用程序 zip 文件中 .ebextensions 目录和 cronjob.config 文件的结构:

myapp.zip

    |-- .ebextensions

    |        |-- cronjob.config

    |        |-- other .config files

    |-- other application files

更新配置文件内容

cronjob.config 文件包含两个部分:

files:此部分指定在 Elastic Beanstalk 实例上创建“myscript.sh”文件的位置,以及所需的文件权限。按需选择文件的位置和权限。

commands:此部分指定在实例上运行的命令列表。

以下是配置文件结构的一般说明:

files:

    "/etc/cron.d/mycron":

        mode: "000644"

        owner: root

        group: root

        content: |

            * * * * * root /usr/local/bin/myscript.sh

 

    "/usr/local/bin/myscript.sh":

        mode: "000755"

        owner: root

        group: root

        content: |

            #!/bin/bash

 

            date > /tmp/date

            # Your actual script content

 

            exit 0

 

commands:

    remove_old_cron:

        command: "rm -f /etc/cron.d/*.bak"

此示例说明了一个包含命令的文件,该命令会在 cron 定时任务命令在发生任何更改 (例如,对 cron 计划的更改) 时,删除旧 cron 文件。

创建完配置文件后,将其添加到应用程序 zip 文件的“.ebextensions”目录中。每次将此应用程序部署到 Elastic Beanstalk 实例上时,都会执行 .ebextensions 目录中的配置文件。

有关使用 .ebextensions 自定义环境的更多信息,请参阅使用配置文件进行高级环境自定义

Elastic Beanstalk, cron, ebextensions, container_commands, 自定义环境


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2016 年 12 月 23 日