Skip to content

Scheduled Jobs

Mike Perham edited this page Feb 13, 2023 · 38 revisions

Sidekiq allows you to schedule the time when a job will be executed. You use perform_in(interval_in_seconds, *args) or perform_at(timestamp, *args) rather than the standard perform_async(*args):

MyWorker.perform_in(3.hours, 'mike', 1)
MyWorker.perform_at(3.hours.from_now, 'mike', 1)

This is useful for example if you want to send the user an email 3 hours after they sign up. Jobs which are scheduled in the past are enqueued for immediate execution.

Timezones

Sidekiq's scheduling is time zone independent. Sidekiq calls .to_f on the timestamp argument, which avoids time zone confusion. See this issue for more details.

Checking for New Jobs

Sidekiq's scheduler is not meant to be second-precise. It checks for scheduled jobs approximately every 5 seconds by default (15 seconds before Sidekiq 5.1). This also applies to the retry queue (see Error-Handling). You can adjust this interval:

Sidekiq.configure_server do |config|
  config.average_scheduled_poll_interval = 15
end

Periodic Jobs

Sidekiq Enterprise supports periodic jobs. Other 3rd party gems also offer cron-like functionality.

Previous: Advanced Options Next: Deployment