Class: InstanceAgent::Runner::Master
- Inherits:
-
ProcessManager::Daemon::Master
- Object
- ProcessManager::Daemon::Master
- InstanceAgent::Runner::Master
- Defined in:
- lib/instance_agent/runner/master.rb
Constant Summary collapse
- ChildTerminationMaxWaitTime =
80
Class Method Summary collapse
- .child_class ⇒ Object
- .description(pid = $$) ⇒ Object
- .log_file ⇒ Object
- .pid_description ⇒ Object
- .pid_file ⇒ Object
Instance Method Summary collapse
Class Method Details
.child_class ⇒ Object
15 16 17 |
# File 'lib/instance_agent/runner/master.rb', line 15 def self.child_class ::InstanceAgent::Runner::Child end |
.description(pid = $$) ⇒ Object
11 12 13 |
# File 'lib/instance_agent/runner/master.rb', line 11 def self.description(pid = $$) "master #{pid}" end |
.log_file ⇒ Object
23 24 25 |
# 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 ⇒ Object
19 20 21 |
# File 'lib/instance_agent/runner/master.rb', line 19 def self.pid_description ProcessManager::Config.config[:program_name] end |
.pid_file ⇒ Object
27 28 29 |
# 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 |
Instance Method Details
#kill_children(sig) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# 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 ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# 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 |