Class: Resqued::QuitAndWait
- Inherits:
-
Object
- Object
- Resqued::QuitAndWait
- Defined in:
- lib/resqued/quit-and-wait.rb
Instance Attribute Summary collapse
-
#grace_seconds ⇒ Object
readonly
Returns the value of attribute grace_seconds.
-
#pidfile ⇒ Object
readonly
Returns the value of attribute pidfile.
-
#quiet ⇒ Object
readonly
Returns the value of attribute quiet.
Class Method Summary collapse
Instance Method Summary collapse
- #exec! ⇒ Object
-
#initialize(grace_seconds:, pidfile:, quiet: false) ⇒ QuitAndWait
constructor
A new instance of QuitAndWait.
- #log(message) ⇒ Object
Constructor Details
#initialize(grace_seconds:, pidfile:, quiet: false) ⇒ QuitAndWait
Returns a new instance of QuitAndWait.
48 49 50 51 52 |
# File 'lib/resqued/quit-and-wait.rb', line 48 def initialize(grace_seconds:, pidfile:, quiet: false) @grace_seconds = grace_seconds @pidfile = pidfile @quiet = quiet end |
Instance Attribute Details
#grace_seconds ⇒ Object (readonly)
Returns the value of attribute grace_seconds.
54 55 56 |
# File 'lib/resqued/quit-and-wait.rb', line 54 def grace_seconds @grace_seconds end |
#pidfile ⇒ Object (readonly)
Returns the value of attribute pidfile.
54 55 56 |
# File 'lib/resqued/quit-and-wait.rb', line 54 def pidfile @pidfile end |
#quiet ⇒ Object (readonly)
Returns the value of attribute quiet.
54 55 56 |
# File 'lib/resqued/quit-and-wait.rb', line 54 def quiet @quiet end |
Class Method Details
.exec!(argv) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/resqued/quit-and-wait.rb', line 5 def self.exec!(argv) = { grace_seconds: 30 } opts = OptionParser.new do |opts| # rubocop: disable Lint/ShadowingOuterLocalVariable opts. = <<~USAGE Usage: resqued quit-and-wait PIDFILE [--grace-period SECONDS] Use this as a preStop script in kubernetes. This script will send a SIGQUIT to resqued immediately, and then sleep until either resqued exits or until the grace period is nearing expiration. This script exits 0 if resqued exited and 99 otherwise. USAGE opts.on "-h", "--help", "Show this message" do puts opts exit end opts.on "-v", "--version", "Show the version" do require "resqued/version" puts Resqued::VERSION exit end opts.on "--grace-period SECONDS", Numeric, "Grace period provided to container runtime (default 30)" do |v| [:grace_seconds] = v end opts.on "--quiet" do [:quiet] = true end end argv = opts.parse(argv) if argv.size != 1 puts opts exit 1 end [:pidfile] = argv.shift new(**).exec! end |
Instance Method Details
#exec! ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/resqued/quit-and-wait.rb', line 56 def exec! start = Time.now stop_at = start + grace_seconds - 5 pid = File.read(pidfile).to_i log "kill -QUIT #{pid} (resqued-master)" Process.kill(:QUIT, pid) while Time.now < stop_at begin # check if pid is still alive. Process.kill(0, pid) rescue Errno::ESRCH # no such process, it exited! log "ok: resqued-master with pid #{pid} exited" exit 0 end end log "giving up, resqued-master with pid #{pid} is still running." exit 99 end |
#log(message) ⇒ Object
78 79 80 81 82 |
# File 'lib/resqued/quit-and-wait.rb', line 78 def log() return if quiet puts "#{Time.now.strftime('%H:%M:%S.%L')} #{}" end |