Class: SidekiqGracefulShutdown::Sidekiq
- Inherits:
-
Object
- Object
- SidekiqGracefulShutdown::Sidekiq
- Defined in:
- lib/sidekiq_graceful_shutdown/sidekiq.rb
Class Method Summary collapse
- .find_processes_by_hostname(hostname) ⇒ Object
- .prepare_shutdown ⇒ Object
- .quit_processes_by_hostname(hostname) ⇒ Object
- .shutdown ⇒ Object
Class Method Details
.find_processes_by_hostname(hostname) ⇒ Object
43 44 45 |
# File 'lib/sidekiq_graceful_shutdown/sidekiq.rb', line 43 def find_processes_by_hostname(hostname) ::Sidekiq::ProcessSet.new.to_a.select { |p| p['hostname'] == hostname } end |
.prepare_shutdown ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/sidekiq_graceful_shutdown/sidekiq.rb', line 27 def prepare_shutdown interval_sec = 5.seconds hostname = Socket.gethostname quit_processes_by_hostname(hostname) loop do processes = find_processes_by_hostname(hostname) if processes.all? { |process| process['quiet'] == 'true' && process['busy'] == 0 } break end sleep interval_sec end end |
.quit_processes_by_hostname(hostname) ⇒ Object
47 48 49 50 51 52 53 54 55 |
# File 'lib/sidekiq_graceful_shutdown/sidekiq.rb', line 47 def quit_processes_by_hostname(hostname) find_processes_by_hostname(hostname).each do |process| puts "stopping process: pid:#{process['pid']}" begin Process.kill('TSTP', process['pid']) rescue Errno::ESRCH end end end |
.shutdown ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/sidekiq_graceful_shutdown/sidekiq.rb', line 4 def shutdown interval_sec = 5.seconds hostname = Socket.gethostname quit_processes_by_hostname(hostname) loop do processes = find_processes_by_hostname(hostname) if processes.all? { |process| process['quiet'] == 'true' && process['busy'] == 0 } processes.each do |process| begin Process.kill('TERM', process['pid']) rescue Errno::ESRCH end end break end sleep interval_sec end end |