你能用亚马逊SQS运行cronjob吗?

时间:2015-02-05 21:45:42

标签: ruby-on-rails ruby amazon-web-services amazon-sqs

我的应用程序是Elastic Beanstalk,我需要创建一个在rails中运行任务的cronjob

rake "sitemap:generate"

我想知道我是否可以使用Amazon SQS,任何人都知道如何做到这一点?

我试过做一个crontab,但它在beanstalk中不起作用......

files:
  "/tmp/cron_job.sh":
    mode: "000777"
    content: |
      #!/usr/bin/env bash
      */2 * * * *  cd /var/app/current/ && RACK_ENV=production bundle exec rake sitemap:generate
    encoding: plain


container_commands:
  01_delete_cron_jobs:
    command: "crontab -r -u ec2-user || exit 0"
  02_add_cron_jobs:
    command: "crontab /tmp/cron_job.sh -u ec2-user"
    leader_only: true

在Elastic Beanstalk中有另一种方法可以做cronjob吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以在Elastic Beanstalk的crontab中运行rake任务,如下所示。

  • 您可能需要访问配置文件中设置的配置。如果将以下内容放在像generate_map.sh这样的shell脚本中,它将包含您的应用程序正在使用的配置(这可能对您的应用程序来说太过分了)。将此脚本文件放在应用程序的根目录中。

    #!/bin/bash
    source /etc/profile
    cd /var/app/current
    rake sitemap:generate
    
  • 将要运行的cronjob放在项目中的.ebextensions目录中的文本文件(如file_with_cron_commands.txt)中。例如,如果您希望您的任务每分钟运行一次,那么该文件将包含以下行。 请务必在文本文件的末尾留一个空白行。

    * * * * * root cd /var/app/current ; sh generate_map.sh
    
  • 在.config文件中,使用容器命令将其复制到相应的cron选项卡目录并设置其权限。

    container_commands:
      01_run_my_gen_map_cron:
        command: "cat .ebextensions/file_with_cron_commands.txt > /etc/cron.d/my_genmap_cron && chmod 644 /etc/cron.d/my_genmap_cron"
    

答案 1 :(得分:0)

看起来像一个老问题,但它在Google搜索中弹出。 所以这是我的尝试 您可以在Rails应用程序中使用SQS创建定期作业(如cron作业)。

  • 创建一个使用SQS进行排队的“工人层”环境

  • 在应用程序的主文件夹中创建文件“ cron.yaml”

示例内容

#cron.yaml 
version: 1
cron:
 — name: "schedule"
   url: "/schedule"
   schedule: "0 */12 * * *"

还结帐: https://medium.com/@joelennon/running-cron-jobs-on-amazon-web-services-aws-elastic-beanstalk-a41d91d1c571

“主动弹性工作”的宝石