PBS脚本-o文件到多个位置

时间:2013-04-17 05:08:51

标签: logging pbs supercomputers

有时当我在PBS集群上运行作业时,我真的很喜欢两个地方的作业日志(-o文件)。一个在$PBS_O_WORKDIR中用于保持一起,一个${HOME}/jobOuts/用于greping / awking / etc ...

从命令行执行测试与tee

一起使用
echo "hello" | qsub -o `tee $HOME/out1.o $HOME/out2.o $HOME/out3.o`

但是一旦我尝试将它放在我的PBS脚本中,如果我把它放在PBS脚本和qsub

中它就不起作用
####Parameterized PBS Script ####
#PBS -S /bin/bash
#PBS -l nodes=1
#PBS -l walltime=0:01:00
#PBS -j oe
#PBS -o `tee TEE_TEST.o TEE_TEST.${PBS_JOBID}.o`
#PBS -M me@email.com
#PBS -m abe
#PBS -V

cd $PBS_O_WORKDIR

echo `date`

这是qsub和错误:

qsub  TEST.pbs
qsub: directive error: -o `tee TEE_TEST.o TEE_TEST.${PBS_JOBID}.o`

我在下面尝试了一些其他的东西 - 没有用。

一行(逗号,半冒号和空格):

#PBS -o ${PBS_JOBNAME}.${PBS_JOBID}.o,${HOME}/jobOuts/${PBS_JOBNAME}.${PBS_JOBID}.o
#PBS -o ${PBS_JOBNAME}.${PBS_JOBID}.o,${HOME}/jobOuts/${PBS_JOBNAME}.${PBS_JOBID}.o
#PBS -o ${PBS_JOBNAME}.${PBS_JOBID}.o ${HOME}/jobOuts/${PBS_JOBNAME}.${PBS_JOBID}.o

和两行:

#PBS -o ${PBS_JOBNAME}.${PBS_JOBID}.o
#PBS -o ${HOME}/jobOuts/${PBS_JOBNAME}.${PBS_JOBID}.o

两个工作班轮只采用第二个-o选项,而一个班轮不起作用。

有什么建议吗?可能吗?

2 个答案:

答案 0 :(得分:0)

我很惊讶您的命令行示例有效。你的工作真的开始了吗?我猜是跑步

echo "hello" | qsub -o `tee $HOME/out1.o $HOME/out2.o $HOME/out3.o`

使作业短路并实际上只是抓住“你好”并将其传递给发球台。我的猜测是,知道bash更好的人可以解释这里实际发生的事情。

我能想到的唯一方法就是让你的脚本把东西写成T恤。为了使其工作,您需要将位置放在可从任何可能的计算节点访问的网络文件系统上。

答案 1 :(得分:0)

我研究了一个qsub man page,我认为没有一种方法可以为标准输出和标准错误指定多个输出文件(每个)。从this page中获取线索,这是我实现类似于您的目标的一种方式。您的PBS环境可能略有不同。另外,我不是一个bash专家,因此可能有更简洁的方法来实现同样的目标。

假设您正在使用默认的-o设置,请在常规作业脚本的末尾添加命令:

# change to the directory from which this job was submitted
cd $PBS_O_WORKDIR

# the standard output by default will be in file JOBNAME.oJOBID
# on my system, PBS_JOBID has ".machinename" at the end, which needs to be removed

filename=${PBS_JOBNAME}.o${PBS_JOBID%%.*}

echo "${PBS_O_WORKDIR}/copy.pbs $filename" | qsub

这将使用stdin参数启动qsub,告诉它运行带有要复制的filename参数的“copy.pbs”。我使用的copy.pbs文件是:

#!/bin/bash

# change to the directory from which this job was submitted
cd $PBS_O_WORKDIR

newfile=${HOME}/jobOuts/$1

cp $1 $newfile

这有助于我将第一个PBS标准输出复制到另一个目录。副作用是使用qsub运行copy.pbs会创建另外两个输出文件STDIN.e *和STDIN.o *。我想再次使用qsub是一个好主意,以确保第一份工作完成。为了更安全,您可以使用qsub的“依赖选项”,例如"-W depend=afterok:$PBS_JOBID copy.pbs $filename" | qsub。但我没有测试这种方法,就像我说的那样,我不是这方面的专家。