如何在 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