Class: PPool::ShellProcessController
Instance Method Summary
collapse
#delay, #num_processes, #process_started, #progress, #running?, #time_running, #time_running_secs
Constructor Details
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_process ⇒ Object
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
|