最終爲我工作的是什麼解決方案(1)。在這裏,我將討論我如何在我的condor提交文件和我的worker shell腳本中實現(1)。
這裏是shell腳本。重要的變化是通過:if [ -f /usr/bin/R ]
來檢查R是否安裝在計算節點上。如果找到R,我們沿着返回值爲0的路徑前進。如果找不到R,則返回1(這是行exit 0
和exit 1
的含義)。
mkdir output
if [ -f /usr/bin/R ]
then
if $(uname -m |grep '64')
then
Rscript code/simulations-x86_64.r $*
else
Rscript code/simulations-i386.r $*
fi
tar -zcvf output/output-$1-$2.tgz2 output/*.csv
exit 0
else
exit 1
fi
現在神鷹提交文件。關鍵的變化是倒數第二行(on_exit_remove = (ExitBySignal == False) && (ExitCode == 0)
)。它檢查來自計算節點的每個作業的返回值 - 如果返回值不爲零(即,如果在計算節點上未找到R),則該作業將放回隊列以重新運行。否則,作業被視爲完成並從隊列中移除。在一個路徑 -
universe = vanilla
log = logs/log_$(Cluster)_$(Process).log
error = logs/err_$(Cluster)_$(Process).err
output = logs/out_$(Cluster)_$(Process).out
executable = condor/worker.sh
arguments = $(Cluster) $(Process)
requirements = (Target.OpSys=="LINUX" && regexp("stat", Machine))
should_transfer_files = YES
when_to_transfer_output = ON_EXIT_OR_EVICT
transfer_input_files = code, R-libs, condor, seeds.csv
transfer_output_files = output
notification = Never
on_exit_remove = (ExitBySignal == False) && (ExitCode == 0)
queue 1800
對於2,https://github.com/viking/Renv可能會有所幫助 – hadley 2013-02-19 17:15:43
[鼠尾草(http://www.sagemath.org/)束R(以及許多其他)獨立的時尚。也許你可以看看他們做到了。在很多情況下,將'LD_LIBRARY_PATH'導出到庫所在的目錄就足夠了。 – MvG 2013-02-19 18:25:46
謝謝,你們倆。 @MvG:我沒有意識到sage捆綁R--也許我可以通過將聖人發送到計算節點來利用它。 – Wesley 2013-02-19 18:59:57