class Condor::Job
Attributes
cmd[R]
dir[R]
finished[R]
id[R]
job_data[R]
priority[R]
Public Class Methods
new(cmd = nil, options = {})
click to toggle source
# File lib/condor-job/job.rb, line 10 def initialize(cmd = nil, options = {}) options ||= {} @priority = options.delete(:priority) @avoid_finalize = !!options.delete(:no_finalizer) @home = `echo $HOME`.strip @home = nil if (@home || '').empty? @dir = options.delete(:directory) || Dir.pwd @id = options.delete(:id) @finished = false @job_data = nil @base_name = options.delete(:base_name) || "#{@dir}/cinput" @suppress_numbering = options.delete(:simple) options.empty? or raise "Unknown options: #{options.keys.inspect}" if @id @cmd = nil update else @id = nil @cmd = [] @cmd << "#!/bin/bash" @cmd << "# encoding: UTF-8" @cmd << "source /etc/profile" @cmd << "source #{@home}/.profile" if @home and File.exist?("#{@home}/.profile") @cmd << "source #{@home}/.rvm/scripts/rvm" if @home and File.exist?("#{@home}/.rvm/scripts/rvm") @cmd += [cmd].flatten end ObjectSpace.define_finalizer(self, proc { finalize_job }) unless @avoid_finalize end
Public Instance Methods
alive?()
click to toggle source
# File lib/condor-job/job.rb, line 96 def alive?; @id and !@finished; end
bash()
click to toggle source
# File lib/condor-job/job.rb, line 102 def bash; IO.read(@bash); end
cleanup()
click to toggle source
# File lib/condor-job/job.rb, line 82 def cleanup [@input, @log, @error, @output, @bash].each{|x| `rm #{x}` if x and File.exists?(x)} if @id end
done?()
click to toggle source
# File lib/condor-job/job.rb, line 91 def done?; @finished; end
error()
click to toggle source
# File lib/condor-job/job.rb, line 98 def error; IO.read(@error); end
finalize_job()
click to toggle source
# File lib/condor-job/job.rb, line 120 def finalize_job unless @avoid_finalize remove if !done? cleanup end end
held?()
click to toggle source
# File lib/condor-job/job.rb, line 94 def held?; @job_data ? (@job_data.job_status == '5') : false; end
idle?()
click to toggle source
# File lib/condor-job/job.rb, line 93 def idle?; @job_data ? (@job_data.job_status == '1') : false; end
input()
click to toggle source
# File lib/condor-job/job.rb, line 99 def input; IO.read(@input); end
log()
click to toggle source
# File lib/condor-job/job.rb, line 100 def log; IO.read(@log); end
output()
click to toggle source
# File lib/condor-job/job.rb, line 101 def output; IO.read(@output); end
priority=(val)
click to toggle source
# File lib/condor-job/job.rb, line 86 def priority=(val) @priority = val set_priority end
remove()
click to toggle source
# File lib/condor-job/job.rb, line 116 def remove `condor_rm #{@id}` if @id end
run(set_dir = nil)
click to toggle source
# File lib/condor-job/job.rb, line 42 def run(set_dir = nil) @dir = set_dir || @dir name = if @suppress_numbering "#{@base_name}" else # get condor input file number num = (Dir["#{@base_name}*"].map{|x| File.basename(x).sub(@base_name,'').to_i}.max or 0) + 1 "#{@base_name}#{num}" end @input, @log, @error, @output, @bash = ['.inp','.log','.error','.output',''].map{|x| "#{name}#{x}"} # create bash executable file to run File.open(@bash,'w'){|f| f.puts @cmd * "\n"} `chmod +x #{@bash}` input = [] input << "Executable = #{@bash}" input << "Universe = vanilla" input << "Log = #{name}.log" input << "Error = #{name}.error" input << "Environment = HOME=#{@home}" if @home input << "Initialdir = #{@dir}" input << "Output = #{@output}" input << "Requirements = TARGET.OpSys == \"LINUX\"" input << "Queue" File.open(@input, 'w'){|f| f.puts input * "\n"} if submit_output = `condor_submit #{@input}`.strip.split.last @id = submit_output + '0' set_priority update(true) @executed = true else @id = nil @executed = false @job_data = nil end end
running?()
click to toggle source
# File lib/condor-job/job.rb, line 92 def running?; @job_data ? (@job_data.job_status == '2') : false; end
runtime()
click to toggle source
# File lib/condor-job/job.rb, line 95 def runtime; @job_data ? Time.at(@job_data.server_time.to_f - @job_data.job_start_date.to_f).utc.strftime("%H:%M:%S") : nil; end
update(force = false)
click to toggle source
update job information
# File lib/condor-job/job.rb, line 105 def update(force = false) Condor::Queue.load(force) return nil if !@id if @job_data = Condor::Queue[@id] return self else @finished = true return nil end end
Private Instance Methods
set_priority()
click to toggle source
# File lib/condor-job/job.rb, line 129 def set_priority `condor_prio -p #{@priority} #{@id}` if alive? end