2013-08-22 149 views
1

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

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

编辑:正如在评论(感谢)表示,一些编辑:

  • PBS =便携式批处理系统
  • 文档可以在这里找到:http://resources.altair.com/pbs/documentation/support/PBSProUserGuide12.1.pdf
  • 我想到了可能的解决方案,并与上前但是下面这个不起作用:我可以让我的bash脚本等待作为工作的挂钟时间请求的时间量。但是,有两个复杂因素:首先,作业可能不需要那么多时间并提前终止,因此使bash脚本等待时间过长;其次,工作可能会排队,而不是立即执行,因此bash脚本可能会等待太久。

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

即使与PBS没有直接关系,也可以认为任何想法。

卡里

+0

考虑加入一个链接到文档'pbs'(在美国,这意味着公共广播系统)。请注意,'pbs'只有18个关注者,所以这可能不是广为人知的技术。这就是说,S.O.是不是一个免费的编码服务,你应该已经尝试解决你的问题,并已发布代码(正确格式)在你的问题。祝你好运。 – shellter

回答

0

我不相信PBSPro支持这一点,但扭矩(另一PBS衍生物)有一个你可能会感兴趣的-x选项,您可以提交这样的工作:

qsub -I -x <executable> 

这将以交互方式运行您的作业并运行可执行文件,并将所有输出发送到您的终端,并且只要该可执行文件终止,作业就会立即执行。那时你可以开始后期处理。 PBSPro可能有类似的功能,但我在这里描述的是TORQUE。

+0

谢谢!这听起来不仅对上述问题非常有用。但是,我不确定我是否可以始终以交互方式运行这项工作。我一定会看看它! –

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