diff --git a/lib/resque/scheduler/cli.rb b/lib/resque/scheduler/cli.rb index c0d7fea9..818d3809 100644 --- a/lib/resque/scheduler/cli.rb +++ b/lib/resque/scheduler/cli.rb @@ -15,7 +15,8 @@ module Scheduler quiet: 'QUIET', pidfile: 'PIDFILE', poll_sleep_amount: 'RESQUE_SCHEDULER_INTERVAL', - verbose: 'VERBOSE' + verbose: 'VERBOSE', + timeout: 'TIMEOUT' }.freeze class Cli diff --git a/lib/resque/scheduler/configuration.rb b/lib/resque/scheduler/configuration.rb index f9ac54f6..3de14ffe 100644 --- a/lib/resque/scheduler/configuration.rb +++ b/lib/resque/scheduler/configuration.rb @@ -80,6 +80,13 @@ def poll_sleep_amount Float(environment.fetch('RESQUE_SCHEDULER_INTERVAL', '5')) end + # Sets timeout for Resque::Scheduler::Lock::Base + attr_writer :timeout + + def timeout + @timeout ||= environment.fetch('TIMEOUT', 60 * 3).to_i + end + private # Copied from https://github.com/rails/rails/blob/main/activemodel/lib/active_model/type/boolean.rb#L17 diff --git a/lib/resque/scheduler/env.rb b/lib/resque/scheduler/env.rb index 150e22a2..e72cfc2c 100644 --- a/lib/resque/scheduler/env.rb +++ b/lib/resque/scheduler/env.rb @@ -66,6 +66,8 @@ def setup_scheduler_configuration c.logformat = options[:logformat] if options.key?(:logformat) + c.timeout = options[:timeout].to_i if options.key?(:timeout) + if (psleep = options[:poll_sleep_amount]) && !psleep.nil? c.poll_sleep_amount = Float(psleep) end diff --git a/lib/resque/scheduler/lock/base.rb b/lib/resque/scheduler/lock/base.rb index 164c2f9f..ae08e0e1 100644 --- a/lib/resque/scheduler/lock/base.rb +++ b/lib/resque/scheduler/lock/base.rb @@ -11,7 +11,7 @@ def initialize(key, options = {}) @key = key # 3 minute default timeout - @timeout = options[:timeout] || 60 * 3 + @timeout = options[:timeout] || Resque::Scheduler.timeout end # Attempts to acquire the lock. Returns true if successfully acquired.