rub2
wrapper for torque qsub
install
gem install rub2
sample
require 'rub2'
submit "SimpleJob" do
execute_with Dir.glob("/etc/*.conf") do |file|
"wc -l #{file}"
end
end
# exit if job failed
submit "WithOptions" do |jobname|
log "log/#{jobname}.log" # log file path
resource 'nodes' => '1:ppn=4', 'mem' => '15mb' # qsub -l option
array_request 2..4 # or array_request [1, 3] # qsub -t option
inherit_environment # qsub -V option
queue 'batch' # qsub -q option
continue_on_error # don't exit on job failed
dry_run # output script and exit. no execute
# multiple arguments
execute_with [1, 2, 3, 4], [4, 5, 6, 7] do |arg1, arg2|
"echo '#{arg1} + #{arg2}' | bc"
end
# succeeded handler
on_done do
puts 'done'
end
# faild handler
# results: {job_id => ret_code}
on_fail do |results|
results.each do |job_id, ret_code|
puts get_executed_command(job_id) unless ret_code == 0
end
end
end
使い方
submit "JobName"で指定された名前でジョブを作成します。 submitブロック内でexecute_withの引数に配列を渡すと、配列の要素数分JobArrayを作成して、execute_withから返された文字列をbashの引数として実行します。 jobが全て成功するとsubmitブロックはtrueを返します。
オプション
log
ログファイル出力先。未指定の場合はカレントフォルダにログディレクトリを作成します。
resource
qsub -lオプション。リソース名 => 値のハッシュを渡してください。
array_request
実行するarray index。1-10の時は1..10のようにRangeを、1,2,4の時は[1,2,4]と配列を渡してください。
inherit_environment
qsub -Vオプション。環境変数を引き継ぎます。
dry_run
実行せずにsubmitするスクリプトを表示します。デバッグ向け。
max_retry
max retry count
ハンドラ
ジョブが成功した場合にはon_doneハンドラ、一つでも失敗した場合はon_failハンドラで指定されたブロックを実行します。 未指定の場合はデフォルトハンドラを実行し、失敗したジョブがあれば表示します。
その他
各jobの結果はRinda(dRuby)サーバーで受け取ります。 ネットワーク不調などにより結果が受け取れず終了しないときは適当にctrl-cで終らせてくさい。