有时,当我在 PBS 集群上运行作业时,我真的希望作业日志(-o 文件)位于两个位置。一个位于 $PBS_O_WORKDIR
中,用于将所有内容保存在一起,另一个位于 ${HOME}/jobOuts/
中,用于 grep/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`
我尝试了下面的其他一些方法 - 没有任何效果。
一行 -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 选项,而一个类轮不起作用。
有什么建议吗?是否可以?
最佳答案
我很惊讶你的命令行示例有效。你的工作真的运行了吗?我的猜测是运行
echo "hello" | qsub -o `tee $HOME/out1.o $HOME/out2.o $HOME/out3.o`
短路正在运行的作业,实际上只是抓取“hello”并将其传递给发球台。我的猜测是,更了解 bash 的人可以解释这里实际发生的情况。
我能想到的使您请求的内容起作用的唯一方法是让您的脚本将内容写入发球台。为了使其工作,您需要将这些位置放置在可从任何可能的计算节点访问的网络文件系统上。
关于logging - PBS 脚本 -o 文件到多个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16051964/