部署到 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 Beanstalk 跨多个 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