我想使用bash脚本依次运行一系列作业,calculation_02等。有输入文件位于(命名为 *.in),应使用“mpirun”和相应的runbinary调用。提供的脚本同时运行所有 *.in文件,因此第一个目录“calculation_01”中的第一个作业失败,第二个目录“calculation_02”中的第二个作业正常终止。
#!/bin/bash
OutputFiles=()
CurrDir=$PWD
#outer for-loop to start the calculation within each directory
for dir in $CurrDir/calculation_*/
do
cd $dir;
#executable for running the input file *.in
mpirun -n 4 *.in
#executable creates the output-file *.out in each directory
files="/calculation_*/*.out"
#inner for-loop to validate the output-file *.out whether the calculation has ended properly in each directory
for outfile in *.out
do
if [[ "$(grep 'Normal Termination' $outfile)" != "" ]]
then
OutputFiles+=(${outfile#*_})
fi
done
done
因此,我认为for循环的逻辑有问题。我需要重写哪一行代码,以便在第一个目录“calculation_01”中启动第一个计算,并验证它是否正常终止,如果正常终止,则在第二个目录“calculation_02”中启动第二个作业?
我很感激任何帮助!
1条答案
按热度按时间xqk2d5yq1#
感谢您的宝贵意见。每当我通过将脚本发送到后台(如
./script.sh &
)来调用脚本时,我发现它在一个目录中成功完成了一次计算,但在第二个目录中失败了,因为它试图同时访问第二个目录。这导致了I/O故障。解决方案是使用PID,并等待完成一个目录中的作业,然后在第二个目录中开始下一个计算。