在 bash 中运行多个文件的程序

在 bash 中运行多个文件的程序

我正在尝试同时运行多个作业。我已经编写了一个脚本来逐个运行该作业,但我想立即提交所有这些作业。它不应该等待前一个工作完成。脚本如下,

#!/bin/bash --login

# Default job location in current directory

#SBATCH -p multicore
#SBATCH -n 4 # Use 4 cores

module load gaussian/g16c01_em64t

export GAUSS_SCRDIR=/scratch/$USER/gau_temp_$JOB_ID
mkdir -p $GAUSS_SCRDIR
export GAUSS_PDEF=$NSLOTS

jobnames=($(seq 1 1 100))

for i in ${jobnames[@]}; do
$g16root/g16/g16 < "job_"${i}".gjf" > "job_"${i}".out"
done

作业的输入文件位于同一目录中,名称为 job_1.gjf、job_2.gjf...job_100.gjf。此代码在顺序作业运行中运行良好。

答案1

正如注释所示,如果您只使用 bash,则需要使用&将作业放入后台。

改变

for i in ${jobnames[@]}; do
$g16root/g16/g16 < "job_"${i}".gjf" > "job_"${i}".out"
done

for i in ${jobnames[@]}; do
    $g16root/g16/g16 < "job_"${i}".gjf" > "job_"${i}".out" &
done
wait

允许循环中进行一些缩进,使作业并行运行,并在最后等待它们全部完成

当你这样做时我会倾向于改变

jobnames=($(seq 1 1 100))

for i in ${jobnames[@]}; do

for i in {1..100}; do

消除对该seq实用程序的需求,只需使用 bash 内置函数,因为这个问题被标记为bash.

相关内容