class InstanceAgent::Runner::Master
Constants
- ChildTerminationMaxWaitTime
Public Class Methods
child_class()
click to toggle source
# File lib/instance_agent/runner/master.rb, line 15 def self.child_class ::InstanceAgent::Runner::Child end
description(pid = $$)
click to toggle source
# File lib/instance_agent/runner/master.rb, line 11 def self.description(pid = $$) "master #{pid}" end
log_file()
click to toggle source
# File lib/instance_agent/runner/master.rb, line 23 def self.log_file File.join(ProcessManager::Config.config[:log_dir], "#{ProcessManager::Config.config[:program_name]}.log") end
pid_description()
click to toggle source
# File lib/instance_agent/runner/master.rb, line 19 def self.pid_description ProcessManager::Config.config[:program_name] end
pid_file()
click to toggle source
# File lib/instance_agent/runner/master.rb, line 27 def self.pid_file File.join(ProcessManager::Config.config[:pid_dir], "#{ProcessManager::Config.config[:program_name]}.pid") end
Public Instance Methods
kill_children(sig)
click to toggle source
# File lib/instance_agent/runner/master.rb, line 60 def kill_children(sig) children.each do |index, child_pid| begin Process.kill(sig, child_pid) rescue Errno::ESRCH end end begin Timeout.timeout(ChildTerminationMaxWaitTime) do children.each do |index, child_pid| begin Process.wait(child_pid) rescue Errno::ESRCH end end end rescue Timeout::Error children.each do |index, child_pid| if ProcessManager.process_running?(child_pid) puts "Stopping #{ProcessManager::Config.config[:program_name]} agent(#{pid}) but child(#{child_pid}) still processing." ProcessManager::Log.warn("Stopping #{ProcessManager::Config.config[:program_name]} agent(#{pid}) but child(#{child_pid}) is still processing.") end end end end
stop()
click to toggle source
# File lib/instance_agent/runner/master.rb, line 31 def stop if (pid = self.class.find_pid) puts "Stopping #{description(pid)}" ProcessManager::Log.info("Stopping #{description(pid)}") begin Process.kill('TERM', pid) rescue Errno::ESRCH end begin Timeout.timeout(ChildTerminationMaxWaitTime) do loop do begin Process.kill(0, pid) sleep(1) rescue Errno::ESRCH break end end end rescue Timeout::Error puts "Child processes still running. Master going down." ProcessManager::Log.warn("Master process (#{pid}) going down before terminating child") end else puts "Nothing running that could be stopped" end end