如何在 Elastic Beanstalk 环境中的 Amazon EC2 实例上创建 cron 作业?

上次更新日期:2020 年 4 月 6 日

我想在现有 AWS Elastic Beanstalk 环境中的所有 Amazon Elastic Compute Cloud(Amazon EC2)实例上创建一个运行自定义脚本的 cron 作业。

简短描述

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

注意:以下解决方法中的步骤添加了一个将在 Elastic Beanstalk 环境中的所有 Amazon EC2 实例上运行的 cron 作业。对于仅在一个实例上运行的定期任务,请考虑使用适用于 Web 环境的 cron-leaderonly-linux.config 文件。对于专用工作线程环境,请考虑使用定期任务

解决方法

创建或更新配置文件

cron-linux.config 文件中有两个键:文件命令

文件键指定了 myscript.sh 文件在 Elastic Beanstalk 实例上的位置以及所需的文件权限。命令键指定了将在实例上运行的命令列表。

从 AWS GitHub 存储库下载 cron-linux.config 模板

--或者--

根据以下示例创建或更新现有配置文件:

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/mycron.bak"

注意:为配置文件命名时,请注意 .ebextensions 目录中的多个配置文件将会按文件名的字母顺序运行。您可以将配置文件命名为 cron-linux.config

cron-linux.config 文件将会创建一个名为 /etc/cron.d/mycron 的 cron 文件,并配置为每分钟运行一个脚本。myscript.sh 脚本将会输出日期,然后在其运行时退出。每次在部署期间应用 cron-linux.config 时,将会为 /etc/cron.d/mycron 文件创建一个名为 /etc/cron.d/mycron.bak 的备份。cron-linux.config 中的最后一个命令将会移除 /etc/cron.d/mycron.bak,从而清理 /etc/cron.d 目录。

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

创建应用程序源包

要将配置文件添加到 Web 应用程序的应用程序源代码中,请完成以下步骤:

1.    在应用程序文件夹的根目录中,创建一个名为 .ebextensions 的目录。

2.    将您创建或更新的 cron-linux.config 文件移至 .ebextensions 文件夹。

3.    为您的应用程序文件(包括新的配置文件)创建一个 zip 文件夹

以下示例演示了应用程序 zip 文件中 .ebextensions 目录和 cron-linux.config 文件的结构:

|-- .ebextensions
|        |-- cron-linux.config 
|        |-- other .config files
|-- other application files