class ProcessManager::Daemon::Child
Attributes
index[RW]
master_pid[RW]
times_run[RW]
Public Class Methods
new(index, master_pid)
click to toggle source
each child gets the PID of the master the child checks regularly if the master is alive and terminates itself if not
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 10 def initialize(index, master_pid) @index = index @master_pid = master_pid @times_run = 0 ProcessManager.set_program_name(description) end
Public Instance Methods
description()
click to toggle source
please override
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 97 def description "child #{position} (#{$$}) of master #{master_pid}" end
increase_run_counter()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 45 def increase_run_counter @times_run += 1 end
master_alive?()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 92 def master_alive? ProcessManager.process_running?(master_pid) end
position()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 101 def position "#{index + 1}/#{ProcessManager::Config.config[:children]}" end
prepare_run()
click to toggle source
please override
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 80 def prepare_run end
prepare_run_with_error_handling()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 62 def prepare_run_with_error_handling with_error_handling do prepare_run end end
run()
click to toggle source
please override
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 75 def run ProcessManager::Log.info "Hello from #{description}" end
run_limit_met?()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 49 def run_limit_met? limit = ProcessManager::Config.config[:max_runs_per_worker].to_i return false if limit == 0 times_run >= limit end
run_with_error_handling()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 68 def run_with_error_handling with_error_handling do run end end
should_stop?()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 88 def should_stop? @should_stop end
start()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 18 def start trap_signals prepare_run_with_error_handling loop do if run_limit_met? ProcessManager::Log.info "#{description}: ran #{times_run} - shutting down" exit elsif should_stop? ProcessManager::Log.info "#{description}: shutting down" exit else # the main loop if master_alive? # the actual main running method run_with_error_handling increase_run_counter else ProcessManager::Log.info "#{description}: Master #{master_pid} not alive - shutting down" exit end end sleep ProcessManager::Config.config[:wait_between_runs].to_i end end
stop()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 83 def stop @should_stop = true ProcessManager.set_program_name("#{description} - shutting down") end
trap_signals()
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 105 def trap_signals [:INT, :QUIT, :TERM].each do |sig| trap(sig) do ProcessManager::Log.info "#{description}: Received #{sig} - setting internal shutting down flag and possibly finishing last run" stop end end # make sure we do not handle children like the master process trap(:CHLD, 'DEFAULT') end
with_error_handling() { || ... }
click to toggle source
# File vendor/gems/process_manager/lib/process_manager/child.rb, line 55 def with_error_handling yield rescue Exception => e ProcessManager::Log.error "#{description}: error during start: #{e.class} - #{e} - #{e.backtrace.join("\n")}" exit 1 end