在bash脚本中运行PBS脚本和后处理输出

时间:2013-08-22 14:21:22

标签: bash jobs pbs

我有一堆作业要提交到PBS队列,然后输出应该在本地进行后处理。由于作业类似(并且我不想经常手动更改它),我自己编写了一个bash脚本,在本地生成PBS作业脚本,然后提交作业。 我的问题如下:如何使我的bash脚本等到PBS作业完成然后开始后处理? (不断检查工作状态不是一种选择。)我有什么可能做到这一点?

非常感谢所有提示,技巧或解决方案!

编辑:如评论(谢谢)中所示,进行了一些编辑:

  • PBS =便携式批处理系统
  • 此处提供了文档:http://resources.altair.com/pbs/documentation/support/PBSProUserGuide12.1.pdf
  • 我考虑过可能的解决方案,然后想出了下面一个不起作用的解决方案:我可以将我的bash脚本等待作为工作挂钟时间请求的时间。但是,有两个复杂情况:首先,作业可能不需要那么多时间并提前终止,因此bash脚本等待时间过长;其次,作业可能排队而不是立即执行,因此bash脚本可能等待的时间太少。

编辑2: 由于我不确定我是否可以按照下面的建议进行交互式运行,因此我考虑了以下内容:我在完成之前让PBS作业脚本创建一个(空)文件。我的bash脚本检查每隔几分钟(比如说)是否存在该文件(使用while循环)。如果存在,我知道作业已终止,可以通过删除刚创建的(空)文件来开始后处理。这样,我最多只有几分钟的延迟,并不需要任何资源。这绝对不是理想的,而是一种解决方法。 任何更实用的想法都受到高度赞赏。

即使与PBS没有直接关系,任何想法都会受到赞赏。

卡里

2 个答案:

答案 0 :(得分:0)

我不相信PBSPro支持这一点,但是TORQUE(另一个PBS衍生产品)有一个您可能感兴趣的-x选项。您可以提交这样的工作:

qsub -I -x <executable>

这将以交互方式运行您的作业并运行可执行文件,并将所有输出定向到您的终端,并且该作业将在该可执行文件终止后立即执行。然后,您可以在该点开始后处理。 PBSPro可能具有类似的功能,但我在这里描述的是TORQUE。

答案 1 :(得分:0)

这与an answer I wrote to a different question有关。我可以访问校园高性能计算中心的几台机器。在至少一个集群上,允许从父PBS脚本调用qsub。这允许按this page所述进行作业链接。因此,您可以使用类似以下框架的解决方案:

# ...do your PBS stuff
# launch your code on the cluster that creates, say "JOBID.txt"
parallel -j0 mycode.sh

# you may need to use PBS environment variables to figure out what your output file is called
filename=$${PBS_JOBID%%.*}.txt # e.g., this would be like the JOBID.txt I wrote above

# next, use qsub to launch the post-processing script
echo "${PBS_O_WORKDIR}/postprocess.pbs $filename" | qsub

posprocess.pbs会将文件名作为参数处理。在我链接的答案中,这有助于我在完成后将PBS标准输出文件复制到另一个文件。但是,我不确定可能的竞争条件,您可能需要使用-W depend= qsub选项,类似这样(未经测试):

echo "-W depend=afterok:$PBS_JOBID postprocess.pbs $filename" | qsub