Sidekiq을 사용하여 모든 시간대의 특정 시간에 실행되도록하는 전략은 무엇입니까?모든 시간대에 특정 시간에 실행되는 Sidekiq
예를 들어, 나는 전 세계에 걸쳐 다음과 같은 시간과 시간대에 매일 작업을 수행 할 Sidekiq 필요합니다
... 8:00 PM EST 8:00 PM CST 8:00 PM MST 8:00 PM PST ...
Sidekiq을 사용하여 모든 시간대의 특정 시간에 실행되도록하는 전략은 무엇입니까?모든 시간대에 특정 시간에 실행되는 Sidekiq
예를 들어, 나는 전 세계에 걸쳐 다음과 같은 시간과 시간대에 매일 작업을 수행 할 Sidekiq 필요합니다
... 8:00 PM EST 8:00 PM CST 8:00 PM MST 8:00 PM PST ...
매 시간마다 동일한 작업을 실행합니다. 매 시간마다 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
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 공식화하는 방법을 살펴 보자.
그 시간을 UTC로 변환 할 때 잘못된 점은 무엇입니까? – spickermann
우리는 모든 시간을 데이터베이스에 UTC로 기록합니다. 어쩌면 나의 질문은 분명하지 않다 ... 우리는 전세계 사용자를 보유하고 있으며 각 사용자의 시간대에서 오후 8시에 "일별 다이제스트"를 보내고 싶다. 말이 돼? @spickermann –
[Sidekiq Enterprise] (http://sidekiq.org/products/enterprise)는이 작업을 수행 할 수 있지만 무료 및 Pro 버전에는이 기능이 포함되어 있지 않습니다. – coreyward