如何解决如何为这个嵌套的 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 个小时左右才能完成所有 15,000 次模拟。
一个 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 来终止进程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。