【发布时间】:2016-05-20 08:15:22
【问题描述】:
我是 Rails 的新手,我使用 whenever gem 来运行 cron 作业。在我的应用程序中,我有一些可以由驱动程序执行的作业。这些作业有开始和结束时间以及它可以分配给驱动程序。通过 cron 作业,我需要检查一些条件,例如
1. job is assigned and start within 30 minutes.
2. job is unassigned and start within 30 minutes.
3. job is assigned and start within 15 minutes.
我在 .rake 文件中添加了条件,并在计划文件中提到了作业,下面我粘贴了我的代码 sn-ps。
schedule.rb
every 1.minutes do
rake "jobs:unassigned_job_start_in_30"
end
every 1.minutes do
rake "jobs:assigned_job_start_in_30"
end
every 1.minutes do
rake "jobs:assigned_job_start_in_15"
end
还有我的 rake 文件 auto_expire.rake
desc "assigned job starts in 30 mins."
task :assigned_job_start_in_30 => :environment do
start_range = Time.now.utc.to_time.to_i+(CONFIG[:job_starts_in_time_30]*60)
end_range = start_range + (1*60)
jobs = Job.where("start_at >= :start_range AND start_at <= :end_range AND status =:status", {start_range: start_range.to_s, end_range: end_range.to_s, status: 2000} )
jobs.each do |job|
job.add_event_log(nil, 2054)
create_and_send_notification(2054, job.id, 0, nil)
end
end
desc "assigned job starts in 15 mins."
task :assigned_job_start_in_15 => :environment do
start_range = Time.now.utc.to_time.to_i+ (CONFIG[:job_starts_in_time_15]*60)
end_range = start_range + (1*60)
jobs = Job.where("start_at >= :start_range AND start_at <= :end_range AND status =:status", {start_range: start_range.to_s, end_range: end_range.to_s, status: 2000} )
jobs.each do |job|
job.add_event_log(nil, 2055)
create_and_send_notification(2055, job.id, 0, nil)
end
end
由于 cron 作业的执行时间为 1 分钟,所以我的机器挂了。请建议我检查条件和执行 cron 作业的最佳方法是什么。
【问题讨论】:
标签: ruby-on-rails rake crontab whenever