在前面的文件完成后执行 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
您好,我需要帮助
事实上,我需要执行几个 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