如何使用 Chef 在 AWS Opsworks 上为 Rails 设置一个 cronjob?

How to setup a cronjob for Rails on AWS Opsworks using Chef?

我尝试在 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 应用程序中的一个文件吗?我如何触发此代码?使用自定义食谱?

正如评论中所建议的,每当 gem 在每次部署您的应用程序后更新您的 crontab。如果您使用它,进入 crontab 的代码就是您的应用程序代码库的一部分。如果您的 cron 作业是与您的应用程序密切相关的 运行ning 任务,例如一些 rake 任务或类似的任务,则此方法非常有用。

您在 Amazon 文档上找到的示例是如何从您的厨师食谱更新 crontab。所以该代码会进入您的食谱,当您 运行 时,厨师会为您填充 crontab。有关 Chef 的 cron 资源的更多信息,您可以 find here.

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

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

kit-chef::cronjob 是我定义所有厨师 cronjobs 的地方。每当我向这个食谱添加一个新的 cronjob 时,我只是 update_custom_cookbooks 在这一层上并部署。

进行完整性检查并以 sudo 身份通过 ssh 进入 cron 服务器和 crontab -l 并确保添加了新任务总是好的。显然,图片中的自定义厨师食谱不会完全满足您的环境需求。