在 Bash 脚本的 For 循环中保持 PBS 作业

问题描述

#!/bin/bash

totT=0

for a in `seq -w 3.5 0.1 4.5`
do 
echo "a= $a"

cat >POSCAR <<!
Al FCC
1.0
$a 0.00 0.00
0.00 $a 0.00
0.00 0.00 $a
4
Direct
0.0 0.0 0.0
0.5 0.0 0.5
0.5 0.5 0.0
0.0 0.5 0.5
!

###I want to write a command to submit vasp.sh to PBS queue within the loop. How can I do it?
qsub vasp.sh
qsub -sync y vasp.sh
###

V=`grep volume/ion OUTCAR | awk '{print $5/4}'`
E=`tail -n1 OSZICAR | awk '{print $5/4}'`
totT=`echo $totT $T|awk '{print $1+$2}'`

echo $a $E >> EvsA
echo $V $E >> EvsV

./cleanup.sh

done

您好,我正在尝试编写一个 Bash 脚本,该脚本在另一个名为 vasp.sh 的脚本上循环,该脚本将 POSCAR 作为输入,并生成 OUTCAR 和 OSZICAR 作为输出。但是我希望每次迭代中的 vasp.sh 在下一次迭代开始之前完成执行,因为我想在每次迭代中使用 cleanup.sh 删除它们之前对输出文件做一些事情。我尝试 qsub -sync y vasp.sh 在下一次迭代之前等待作业完成,但终端显示“s”、“y”、“n”是无效选项。有人可以教我正确的方法吗?

解决方法

我不确定如何决定将“-sync”选项传递给 qsub。qsub 的手册页根本没有提到这些选项。

我能想到两种方法来做你想做的事。

1 - 除非作业完成,否则您可以提交作业并制作 qsub 块。 "qsub -Wblock=True vash.sh" 应该这样做。我不会推荐此选项,因为根据您所在综合设施中的工作量,您永远无法猜测工作何时会结束。

2 - 我建议使用作业依赖来提交您的作业。提交第一个作业后,捕获其作业 ID 并将后续作业提交为 - "qsub -Wdepend=after:vasp.sh"。这样做将确保您的工作流程得到遵循,并且作业一个接一个地运行。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...