Sidekiq在每个时区的特定时间执行

时间:2017-04-12 15:10:09

标签: ruby-on-rails ruby sidekiq

使用Sidekiq,在每个时区的特定时间执行它的策略是什么?

例如,我需要Sidekiq每天在以下时间和地区执行任务:

bp.get_figure().gca().set_xlabel("")

3 个答案:

答案 0 :(得分:4)

我会在每小时开始时做同样的工作。您可能希望每小时使用cron运行作业,或者查看此列表以了解如何创建recurring jobs in Sidekiq

作为第一步,在作业中,您需要立即计算出8AM所有的时区。例如:

8am_time_zones = ActiveSupport::TimeZone.all
                                        .select { |tz| tz.now.hour == 8 }
                                        .map { |tz| tz.tzinfo.name }
#=> ["America/Los_Angeles", "America/Tijuana", "America/Phoenix"]

使用此列表,您可以轻松地从数据库加载居住在该时区的用户(假设您以此格式存储用户的时区)并向他们发送电子邮件:

User.where(time_zone: 8am_time_zones).find_each do |user|
  # email_newsletter(recipient: user)
end

答案 1 :(得分:0)

Sidekiq没有针对您每天使用情况的计划机制。您需要一个像whenever这样的cron调度程序。

假设您的服务器配置为UTC,您只需创建日程安排:

# EST 8pm
every 1.day, :at => '1:00 am' do
  runner "MyModel.task_to_run_at_1_am_UTC"
end
# CST 8pm
every 1.day, :at => '2:00 am' do
  runner "MyOtherModel.task_to_run_at_2_am_UTC"
end

要在一行中完成:

every '* 6,7,8,9,10 1 * *' do
  runner "MyOtherModel.task_to_run_at_2_am_UTC"
end

看看如何制定cron syntax

答案 2 :(得分:0)

创建此作业并每 1 小时 1 分钟执行一次

Dim i As Integer,i3 As Integer, i1 As Integer, i2 As Integer