我的应用程序是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吗?
谢谢。
答案 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 * * *"
“主动弹性工作”的宝石