我一直在使用
qsub -t 1-90000 do_stuff.sh
在Sun GridEngine集群上提交我的任务,但现在发现自己的数据集(也是超大的)也不是那么方便命名的。最好的方法是什么?我可以尝试重命名它们,但名称包含需要保留的信息,这显然会引入许多问题。我可以将所有内容预处理为jsons,但是如果有一种方法可以只使用qsub -all_contents_of_directory,那将是理想的选择。
我是SOL吗?我应该去相关目录找到。 -exec'qsub setupscript.sh {}'?
答案 0 :(得分:1)
使用另一个脚本来提交作业 - 这是我在工作名称中需要目录名称时使用的示例。 “run_openfoam”是特定目录中的pbs脚本。
#!/bin/bash
cd $1
qsub -N $1 run_openfoam
您可以调整此脚本以适合您的工作,然后通过命令行上的循环运行它。因此,您不是提交作业数组,而是将作为第一个参数传递的每个目录名称的作业提交给此脚本。
答案 1 :(得分:1)
我倾向于使用Makefile来自动化这些东西:
INPUTFILES=$(wildcard *.in)
OUTPUTFILES=$(patsubst %.in,%.out,$(INPUTFILES))
all : $(OUTPUTFILES)
%.out : %.in
@echo "mycommand here < $< > $@" | qsub
然后输入'make',所有文件都将提交给qsub。当然,这将同时提交所有内容,这可能会给您的计算群集带来不幸的事情以及您的系统管理员的血压。
如果删除“| qsub”,则make的输出是要运行的命令列表。将该列表提供给一个或多个qsub命令,您将提高效率并减少qsub作业。我一直在使用GNU parallel,但它需要一个阻塞的qsub,直到完成工作。我写了一个包装器来做到这一点,但它调用qstat很多,这意味着很多打击系统。我应该以某种方式修改它,但这里没有很多计算上“好”的选项。
答案 2 :(得分:0)
我在qsub命令中无法理解“-t 1-90000”。我搜索qsub手册并没有显示这样的“-t”选项。
答案 3 :(得分:0)
创建一个文件,其中包含数据集列表
find . -print >~/list_of_datasets
脚本:
#!/bin/bash
exec ~/setupscript.sh $(sed -n -e "${SGE_TASK_ID}p" <~/list_of_datasets)
qsub -t 1-$(wc -l ~/list_of_datasets) job_script