调度
every 1.minute do
runner "DailyNotificationChecker.send_notifications"
end
工作
我以为我可以进行无限循环并使用睡眠方法让它睡20秒。这样,这项工作将每20秒运行一次,但如果我的cron再次采用这种方法将会发生什么。
class DailyNotificationChecker
def self.send_notifications
Rails.logger.info "Triggered NotificationChecker"
if RUN_SCHEDULER == "true"
Rails.logger.info "Running Performer"
notes = Note.unprocessed
if notes.present?
notes.each do |note|
RealtimeNotificationChecker.performer(note.user_id,"note_created")
note_hash = {}
note_hash[:note_id] = note.id
url = URI.parse(PROCESS_NOTE_API_URL)
resp, data = Net::HTTP.post_form(url, note_hash)
end
end
sleep 20 #=> workaround for to sleep 20 seconds
end
end
end
答案 0 :(得分:3)
有几种方法可以解决这个问题:
whenever
(即cron
个作业),并且每分钟运行一次此任务,无需循环。whenever
。您可以使用类似monit
的内容来确保脚本不会无声地死亡。Notification
创建时触发新的后台作业。使用delayed_job,sidekiq或resque等工具来处理工作量。答案 1 :(得分:0)
考虑到我的情况,我已经解决了代码
strace
我正在运行一个循环,每59秒就会过期,并在循环内睡20秒。