Skip to content

Commit

Permalink
Merge pull request sidekiq#2101 from mperham/refactor_ctl
Browse files Browse the repository at this point in the history
Better usage text for sidekiqctl, fixes sidekiq#2100
  • Loading branch information
mperham committed Dec 26, 2014
2 parents f69d159 + 136af0b commit a1d6d25
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 15 deletions.
1 change: 1 addition & 0 deletions Changes.md
Expand Up @@ -3,6 +3,7 @@ HEAD

- Log Sidekiq Pro's Batch ID if available [#2076]
- Refactor Processor Redis usage to avoid redis/redis-rb#490 [#]
- Add better usage text for `sidekiqctl`.


3.3.0
Expand Down
30 changes: 16 additions & 14 deletions bin/sidekiqctl
Expand Up @@ -3,23 +3,29 @@
require 'fileutils'

class Sidekiqctl
DEFAULT_TIMEOUT = 10
DEFAULT_KILL_TIMEOUT = 10

attr_reader :stage, :pidfile, :timeout
attr_reader :stage, :pidfile, :kill_timeout

def self.print_usage
puts "#{File.basename($0)} - stop a Sidekiq process from the command line."
puts
puts "Usage: #{File.basename($0)} <command> <pidfile> <timeout>"
puts " where <command> is either 'quiet', 'stop' or 'shutdown'"
puts "Usage: #{File.basename($0)} <command> <pidfile> <kill_timeout>"
puts " where <command> is either 'quiet' or 'stop'"
puts " <pidfile> is path to a pidfile"
puts " <timeout> is number of seconds to wait till Sidekiq exits (default: #{Sidekiqctl::DEFAULT_TIMEOUT})"
puts " <kill_timeout> is number of seconds to wait until Sidekiq exits"
puts " (default: #{Sidekiqctl::DEFAULT_KILL_TIMEOUT}), after which Sidekiq will be KILL'd"
puts
puts "Be sure to set the kill_timeout LONGER than Sidekiq's -t timeout. If you want"
puts "to wait 60 seconds for jobs to finish, use `sidekiq -t 60` and `sidekiqctl stop"
puts " path_to_pidfile 61`"
puts
end

def initialize(stage, pidfile, timeout)
@stage = stage
@pidfile = pidfile
@timeout = timeout
@kill_timeout = timeout

done('No pidfile given', :error) if !pidfile
done("Pidfile #{pidfile} does not exist", :warn) if !File.exist?(pidfile)
Expand All @@ -30,7 +36,7 @@ class Sidekiqctl
begin
send(stage)
rescue NoMethodError
done 'Invalid control command', :error
done "Invalid command: #{stage}", :error
end
end

Expand Down Expand Up @@ -59,7 +65,7 @@ class Sidekiqctl

def stop
`kill -TERM #{pid}`
timeout.times do
kill_timeout.times do
begin
Process.getpgid(pid)
rescue Errno::ESRCH
Expand All @@ -72,11 +78,7 @@ class Sidekiqctl
FileUtils.rm_f pidfile
done 'Sidekiq shut down forcefully.'
end

def shutdown
quiet
stop
end
alias_method :shutdown, :stop
end

if ARGV.length < 2
Expand All @@ -85,7 +87,7 @@ else
stage = ARGV[0]
pidfile = ARGV[1]
timeout = ARGV[2].to_i
timeout = Sidekiqctl::DEFAULT_TIMEOUT if timeout == 0
timeout = Sidekiqctl::DEFAULT_KILL_TIMEOUT if timeout == 0

Sidekiqctl.new(stage, pidfile, timeout)
end
2 changes: 1 addition & 1 deletion lib/sidekiq/manager.rb
Expand Up @@ -48,7 +48,7 @@ def stop(options={})

@done = true

logger.info { "Shutting down #{@ready.size} quiet workers" }
logger.info { "Terminating #{@ready.size} quiet workers" }
@ready.each { |x| x.terminate if x.alive? }
@ready.clear

Expand Down

0 comments on commit a1d6d25

Please sign in to comment.