【问题标题】:How to setup a cronjob for Rails on AWS Opsworks using Chef?如何使用 Chef 在 AWS Opsworks 上为 Rails 设置 cronjob?
【发布时间】:2015-03-02 14:31:32
【问题描述】:

我尝试在 AWS Opsworks 上为我的 Rails 应用程序设置一个 cronjob,但我不确定它是如何工作的。有AWS官方文档:http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-extend-cron.html

cron "job_name" do
  hour "1"
  minute "10"
  weekday "6"
  command "cd /srv/www/myapp/current && rake task"
end

但我无法弄清楚它是如何工作的。我把上面的代码放在哪里?它是我的 Rails 应用程序中的文件吗?以及如何触发此代码?有一本定制食谱?

【问题讨论】:

  • 你为什么不尝试使用 whenever gem?
  • 感谢您的建议。但据我了解,每当来自至少一个 cronjob 的作业时,我仍然必须触发。

标签: ruby-on-rails chef-infra aws-opsworks


【解决方案1】:

在每次部署应用程序后 gem 更新您的 crontab 时,正如 cmets 中所建议的那样。如果您使用它,则转到 crontab 的代码是您的应用程序代码库的一部分。如果您的 cron 作业正在运行与您的应用程序密切相关的任务,例如一些 rake 任务或类似的东西,这种方法非常有用。

您在 Amazon 文档中找到的示例是如何从您的厨师食谱更新 crontab。这样代码就会进入你的食谱,当你运行它时,厨师会为你填充 crontab。更多关于 Chef 的 cron 资源的信息你可以find here

【讨论】:

  • 谢谢。所以这意味着我不需要通过cron触发任何时候的工作?相反,他们在实例 crontab 上添加 cronjobs 并在部署的实例上自动运行?如果我有两个并行实例怎么办?
  • 是的,只要为您填充 crontab。您可以设置要设置/使用 cron 作业的角色,就像在 Capistrano 上一样,查看它的 GitHub 存储库以获取示例 github.com/javan/whenever
  • 非常感谢。但是当我有多个带有负载均衡器的实例时,我需要小心吗?因为那时我在每个实例上都有相同的 cronjobs?
  • 是的,可能您需要创建一些角色来确定哪些角色需要 cron 工作,或者让一些专门的工作人员来完成这类工作。
【解决方案2】:

我有一个 cron 层,它只处理运行我的 cron 作业。这是一个自定义层,然后我添加了所有特定于 Rails 的作业。如图所示。

用于运行 rake 任务的 cron 的自定义层: https://www.dropbox.com/s/za3lkiuk8zayzs5/Screenshot%202015-03-01%2022.22.06.png?dl=0

kit-chef::cronjob 是我定义所有厨师 cronjob 的地方。每当我向这个配方添加新的 cronjob 时,我只需在这一层上更新_custom_cookbooks 并进行部署。

进行健全性检查并 ssh 进入 cron 服务器和 crontab -l 作为 sudo 并确保添加了新任务总是好的。显然,图片中的定制厨师食谱不会完全符合您的环境所需。

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 2013-11-23
    • 2018-02-08
    • 2014-06-06
    • 2016-07-14
    • 1970-01-01
    • 2016-11-25
    • 2013-09-07
    • 2017-09-04
    相关资源
    最近更新 更多