部署到 AWS beanstalk 时移除旧冠
Posted
技术标签:
【中文标题】部署到 AWS beanstalk 时移除旧冠【英文标题】:Remove old crons when redeplying to AWS beanstack 【发布时间】:2018-09-08 22:48:07 【问题描述】:不是 AWS 方面的专家,并试图在 Cron 作业上胡闹。为了测试,我有一个示例脚本每分钟向我发送电子邮件。现在,我想将其更改为每 10 分钟一次 (*/10 * * * *) 这些是我尝试过的容器命令,但它们似乎都不起作用。
我正在使用配置文件和 txt 文件来定义 crons。
配置文件内容(我从网上读到的各种想法)
container_commands:
00_remove_old_cron_jobs0:
command: "rm -fr /etc/cron.d/cron_job"
01_remove_old_cron_jobs1:
command: "sudo sed -i 's/empty stuff//g' /etc/cron.d/cron_job"
02_remove_old_cron_jobs2:
command: "crontab -r || exit 0"
03_cron_job:
command: "cat .ebextensions/cron_job.txt > /etc/cron.d/cron_job && chmod 644 /etc/cron.d/cron_job"
leader_only: true
cron_job.txt 文件内容。
# The newline at the end of this file is extremely important. Cron won't run without it.
0 * * * * ec2-user /usr/bin/php -q /var/www/html/cron1.php > /dev/null
0 * * * * ec2-user /usr/bin/php -q /var/www/html/html/cron2.php > /dev/null
*/10 * * * * ec2-user /usr/bin/php -q /var/www/html/cronTestEmailer.php > /dev/null
测试电子邮件脚本每分钟而不是每 10 分钟触发一次,我不知道如何确保正确反映 cron 更新。
【问题讨论】:
【参考方案1】:您可以使用以下 ebextensions 配置文件实现相同的目的。
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"
更多关于配置文件的详细信息如下:
-
files:创建一个 Cron 作业和一个名为 myscript.sh 的文件。如果已经存在同名文件,首先它会移动旧文件 .bak 并创建具有新内容的文件。
命令:删除所有 .bak 文件
【讨论】:
嗨,我知道这是旧的,但我应用了相同的解决方案,但突然remove_old_cron
命令似乎不再工作了。在mycron
我有很多 cronjobs 并且我创建了相应的脚本。但是然后我从mycron
中删除了一个cronjob 并进行了部署,但cronjob 仍在运行。任何想法?谢谢。以上是关于部署到 AWS beanstalk 时移除旧冠的主要内容,如果未能解决你的问题,请参考以下文章
共享 AWS Elastic Beanstalk 配置以将 git 部署到 AWS
使用 AWS CodeBuild 和 EB CLI 部署到 AWS Elastic Beanstalk
如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?
部署到 AWS Elastic Beanstalk 时的 ConnectionString 转换
AWS CodePipeline - 使用现有 Dockerrun.aws.json 部署到 Elastic Beanstalk