Class: PerfectSched::Worker
- Inherits:
-
Object
- Object
- PerfectSched::Worker
- Defined in:
- lib/perfectsched/worker.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(runner, config = nil, &block) ⇒ Worker
constructor
A new instance of Worker.
- #logrotated ⇒ Object
- #replace(command = [$0]+ARGV) ⇒ Object
- #restart ⇒ Object
- #run ⇒ Object
- #stop ⇒ Object
Constructor Details
#initialize(runner, config = nil, &block) ⇒ Worker
Returns a new instance of Worker.
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/perfectsched/worker.rb', line 26 def initialize(runner, config=nil, &block) # initial logger STDERR.sync = true @log = DaemonsLogger.new(STDERR) @runner = runner block = Proc.new { config } if config @config_load_proc = block @finished = false end |
Class Method Details
.run(runner, config = nil, &block) ⇒ Object
22 23 24 |
# File 'lib/perfectsched/worker.rb', line 22 def self.run(runner, config=nil, &block) new(runner, config, &block).run end |
Instance Method Details
#logrotated ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/perfectsched/worker.rb', line 100 def logrotated @log.info "reopen a log file" begin @log.reopen! rescue @log.error "failed to restart: #{$!}" $!.backtrace.each {|bt| @log.warn "\t#{bt}" } return false end return true end |
#replace(command = [$0]+ARGV) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/perfectsched/worker.rb', line 86 def replace(command=[$0]+ARGV) @log.info "replace" begin return if @replaced_pid stop @replaced_pid = Process.spawn(*command) rescue @log.error "failed to replace: #{$!}" $!.backtrace.each {|bt| @log.warn "\t#{bt}" } return false end self end |
#restart ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/perfectsched/worker.rb', line 71 def restart @log.info "Received restart" begin engine = Engine.new(@runner, load_config) current = @engine @engine = engine current.shutdown rescue @log.error "failed to restart: #{$!}" $!.backtrace.each {|bt| @log.warn "\t#{bt}" } return false end return true end |
#run ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/perfectsched/worker.rb', line 37 def run @sig = install_signal_handlers begin @engine = Engine.new(@runner, load_config) begin until @finished @engine.run end ensure @engine.shutdown end ensure @sig.stop end return nil rescue @log.error "#{$!.class}: #{$!}" $!.backtrace.each {|x| @log.error " #{x}" } return nil end |
#stop ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/perfectsched/worker.rb', line 58 def stop @log.info "stop" begin @finished = true @engine.stop if @engine rescue @log.error "failed to stop: #{$!}" $!.backtrace.each {|bt| @log.warn "\t#{bt}" } return false end return true end |