如何为这个嵌套的Bash脚本使用超时



我写了下面的bash脚本,它运行良好,除了一些随机的时刻,它完全冻结,不会进一步超过a0的某个值

export OMP_NUM_THREADS=4
N_SIM=15000
N_NODE=1
for ((i = 1; i <= $N_SIM; i++))
do
index=$((i))
a0=$(awk "NR==${index} { print $2 }" Intensity_Wcm2_versus_a0_10_20_10_25_range.txt)
dirname="a0_${a0}"
if [ -d "${dirname}" ]; then
cd -P -- "${dirname}" # enter the directory because it exists already
if [ -f "ParticleBinning0.h5" ]; then # move to next directory because the sim has been already done and results are there
cd ..
echo ${a0}
echo We move to the next directory because ParticleBinning0.h exists in this one already.
continue 1
else
awk -v s="a0=${a0}" 'NR==6 {print s} 1 {print}' ../namelist_for_smilei.py > namelist_for_smilei_a0included.py
echo ${a0}
mpirun -n 1 ../smilei namelist_for_smilei_a0included.py 2&> smilei.log
cd ..
fi
else
mkdir -p $dirname
cd $dirname
awk -v s="a0=${a0}" 'NR==6 {print s} 1 {print}' ../namelist_for_smilei.py > namelist_for_smilei_a0included.py
echo ${a0}
mpirun -n 1 ../smilei namelist_for_smilei_a0included.py 2&> smilei.log 
cd ..
fi
done

我需要让它运行12个小时左右,才能完成所有15000个模拟。

一个mpirun -n 1 ../smilei namelist_for_smilei.py 2&> smilei.log命令平均运行4秒。

有时它只是停在a0的一个值上,屏幕上最后打印的a0的值就是a0_12.032131。它保持这样,保持这样,没有理由。smilei.log中没有来自特别有故障的a0_12.032131文件夹的输出。所以我不知道a0的这个特殊值发生了什么。a0的任何值都不是特别重要,我可以不计算a0的1个特定值。

我试着在Ubuntu中使用超时实用程序,以某种方式使它超过a0的任何值,这需要2分钟以上的运行时间。如果它需要更多的时间来运行,那么它显然失败了,并停止了整个进程的向前运行。

写这样的剧本超出了我的能力。

我的特定管道的模板应该是什么样子的?

谢谢!

这个mpirun程序似乎挂起了。正如您所说,您可以使用timeout实用程序在经过合理的时间后终止其执行:

timeout --signal INT 2m mpirun...

根据mpirun处理信号的方式,可能需要使用KILL而不是INT来终止进程。

相关内容

  • 没有找到相关文章

最新更新