Class: PPool::ShellProcessController

Inherits:
BasicProcessController show all
Defined in:
lib/shell_process_controller.rb

Direct Known Subclasses

TimedProcessController

Instance Method Summary collapse

Methods inherited from BasicProcessController

#delay, #num_processes, #process_started, #progress, #running?, #time_running, #time_running_secs

Constructor Details

#initialize(script, logdir, rmlogs) ⇒ ShellProcessController

Returns a new instance of ShellProcessController.



29
30
31
32
33
34
35
36
37
38
# File 'lib/shell_process_controller.rb', line 29

def initialize(script, logdir, rmlogs)
  super()
  @script = script
  @logdir = logdir
  @rmlogs = rmlogs
  @log = File.open("#{logdir}/ppool.log", 'w')
  @stdout_log = {}
  @stderr_log = {}

end

Instance Method Details

#delete_log_file(pid, suffix) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/shell_process_controller.rb', line 67

def delete_log_file(pid, suffix)
  begin
    Dir.glob("#{@logdir}/process_#{pid}_*.#{suffix}") { |file|
	  info "deleting log file #{file} for process #{pid}"
	  File.delete(file)
	}
  rescue => e
    info "error deleting log file for process #{pid}: #{e}"
  end

end

#info(m) ⇒ Object



61
62
63
64
# File 'lib/shell_process_controller.rb', line 61

def info(m)
  @log.write("#{m}\n")
  @log.flush
end

#process_ended(pid, status) ⇒ Object



54
55
56
57
58
59
# File 'lib/shell_process_controller.rb', line 54

def process_ended(pid, status)
  if @rmlogs && status == 0    
   delete_log_file(pid, 'stdout')
   delete_log_file(pid, 'stderr')
  end
end

#run_processObject



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/shell_process_controller.rb', line 40

def run_process

  timestamp = Time.now.strftime('%Y%m%d%H%M%S')
  pid = Process.pid

  stdout = "#{@logdir}/process_#{pid}_#{timestamp}.stdout"
  stderr = "#{@logdir}/process_#{pid}_#{timestamp}.stderr"
  stdin = "/dev/null"

  info "running #{@script} output to #{stdout}"
  Kernel.exec("#{@script} > #{stdout} 2> #{stderr} < #{stdin}")

end