在前面的文件完成后执行 bash 个文件到 运行

execute bash files when previous ones have finished to run

您好,我需要帮助

事实上,我需要执行几个 bash 个文件,例如:

file1.sh
file2.sh
file3.sh 
file4.sh 

这些文件将生成将用于另一个 bash 文件调用的数据 final.sh

因此,为了赢得时间,我想通过执行以下操作在集群上同时执行 fileNb.sh 个文件:

for file in file*.sh; do sbatch $file; done

,然后当所有工作完成后,我想自动执行 final.sh 文件。

有人有想法吗?

非常感谢

这样不行吗?

for file in file*.sh; do sbatch $file; done; ./final.sh

一个干净的选择是将作业集重新组织为 job array and then add a dependency 整个阵列的最终作业。

假设 fileN.sh 看起来像这样:

#!/bin/bash
#SBATCH --<some option>
#SBATCH --<some other option>

./my_program input_fileN

您可以将其设为作业数组。在单个提交文件file.sh中,写这个

#!/bin/bash
#SBATCH --<some option>
#SBATCH --<some other option>
#SBATCH --array=1-4

./my_program input_file${SLURM_ARRAY_TASK_ID}

然后运行

JOBID=$(sbatch --parsable file.sh)
sbatch --dependency after:$JOBID final.sh

如果您的作业不能直接由整数参数化,请创建一个 Bash 数组,如下所示:

#!/bin/bash
#SBATCH --<some option>
#SBATCH --<some other option>
#SBATCH --array=0-2

ARGS=(SRR63563 SRR63564 SRR63565)

fasterq-dump --threads 10  ${ARGS[$SLURM_ARRAY_TASK_ID]} -O /path1/path2/path3/

你可以这样做:

sbatch --wait file1.sh &
sbatch --wait file2.sh &
sbatch --wait file3.sh &
sbatch --wait file4.sh &
wait
sbatch final.sh

或者,更简单地使用 GNU Parallel:

parallel -j4 sbatch --wait ::: file*.sh
sbatch final.sh