如何在计算机群集上运行进程时访问标准输出?

介绍

我使用一台计算机集群,通过.pbs文件提交( qsub )作业。 缺省值是在执行qsub命令的工作目录中的文件上打印标准输出和标准错误。

问题

对我来说,问题是标准输出和标准错误文件只出现在stream程结束时,而我希望能够直接监控stream程的进展。

思考

我知道以下选项存在

 #PBS -o #PBS -e #PBS -j [oe/eo] 

以表示标准输出和标准错误的特定文件名称和位置。 不过,有两点我不清楚

  1. 我不太清楚在使用数组时它是如何工作的(通过#PBS -t )。 一个PBS_ARRAYID标准输出会覆盖以前的标准输出吗? 是否将整个数组的所有标准输出打印在同一个文件中,或者有没有办法在文件名中包含PBS_ARRAYID

  2. 在这个过程结束之前,使用这些选项是否可以帮助我以任何方式访问标准输出?

在计算机群集上提交过程时,如何在过程结束之前将标准输出和标准错误可视化?

根据此文档 ,数组作业中的每个任务都会获取环境变量PBS_ARRAYID集,因此可以将其包含在您的设置中:

 #PBS -o /path/for/$PBS_JOBNAME.$PBS_ARRAYID 

我不知道为什么你的引擎会扣留输出文件,直到作业完成。 (我的网格引擎不这样做。)也许它将它们写入临时位置或临时名称,然后在作业完成后移动它们?

在我使用的计算机集群中,至少将标准输出保存在仅在进程结束时保存到#PBS -o的RAM中。 一种解决方法是显式重定向shell脚本中的标准输出。 做类似的事情:

 executable arguments >& StandardOutputs_${PBS_JOBNAME}.txt