【发布时间】:2019-11-01 13:47:52
【问题描述】:
我正在使用 slurm 脚本在集群上运行用于 Matlab 计算的数组。每个脚本都使用一个数组来循环一个 matlab 参数。
1) 是否可以创建一个 shell 脚本来循环另一个变量?
2) 我可以将变量传递给 slurm 脚本吗?
例如,我的 slurm 文件目前看起来像
#!/bin/bash
#SBATCH --array=1-128
...
matlab -nodesktop r "frame=[${SLURM_ARRAY_TASK_ID}]; filename=['Person24']; myfunction(frame, filename);";
我经常需要运行这个数组来处理许多不同的文件。这意味着我将提交作业(sbatch exampleScript.slurm),编辑文件,将“Person24”更新为“Person25”,然后重新提交作业。当我有大量文件要处理时,这非常低效。
我可以制作一个将变量传递给 slurm 脚本的 shell 脚本吗?例如,像这样:
Shell 脚本 (myshell.sh)
#!/bin/bash
for ((FNUM=24; FNUM<=30; FNUM+=1));
do
sbatch myscript.slurm >> SOMEHOW PASS ${FNUM} HERE (?)
done
Slurm 脚本 (myscript.slurm)
#!/bin/bash
#SBATCH --array=1-128
...
matlab -nodesktop -nodisplay r "frame=[${SLURM_ARRAY_TASK_ID}]; filename=[${FNUM}]; myfunction(frame, filename);";
我可以使用类似的东西有效地提交所有作业 sbatch myshell.sh
谢谢!
【问题讨论】:
标签: arrays bash matlab slurm sbatch