mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
50 lines
850 B
Ruby
Executable file
50 lines
850 B
Ruby
Executable file
#!/usr/bin/env ruby
|
|
|
|
require 'fileutils'
|
|
|
|
stage = ARGV[0]
|
|
pidfile = ARGV[1]
|
|
timeout = ARGV[2].to_i
|
|
timeout = 10 if timeout == 0
|
|
|
|
def done(msg)
|
|
puts msg
|
|
exit(0)
|
|
end
|
|
|
|
done 'No pidfile given' if !pidfile
|
|
done 'Pidfile does not exist' if !File.exist?(pidfile)
|
|
|
|
pid = File.read(pidfile).to_i
|
|
done 'Invalid pidfile content' if pid == 0
|
|
|
|
begin
|
|
Process.getpgid(pid)
|
|
rescue Errno::ESRCH
|
|
done "Process doesn't exist"
|
|
end
|
|
|
|
def quiet
|
|
`kill -USR1 #{pid}`
|
|
end
|
|
|
|
def stop
|
|
`kill -TERM #{pid}`
|
|
timeout.times do
|
|
begin
|
|
Process.getpgid(pid)
|
|
rescue Errno::ESRCH
|
|
FileUtils.rm_f pidfile
|
|
done 'Sidekiq shut down gracefully.'
|
|
end
|
|
sleep 1
|
|
end
|
|
`kill -9 #{pid}`
|
|
done 'Sidekiq shut down forcefully.'
|
|
end
|
|
|
|
case stage
|
|
when 'quiet' then quiet
|
|
when 'stop' then stop
|
|
when 'quiet_and_stop' then quiet && stop
|
|
end
|