我有一个qsub脚本
#####----submit_job.sh---#####
#!/bin/sh
#$ -N job1
#$ -t 1-100
#$ -cwd
SEEDFILE=/home/user1/data1
SEED=$(sed -n -e "$SGE_TASK_ID p" $SEEDFILE)
/home/user1/run.sh $SEED
问题是 - 它将所有错误和输出文件(job1.eJOBID& job1.oJOBID)放在我运行qsub submit_job.sh的同一目录中,而我想保存这些文件(输出和错误日志)文件位于相同的不同位置(指定为$ SEED_output)。 我试图将行更改为
/home/user1/run.sh $SEED -o $SEED_output
但它没有用。有什么建议??如何指定默认输出和错误日志文件的路径和名称?
答案 0 :(得分:34)
通常,错误和输出文件在qsub脚本中作为pbs指令给出,或者作为qsub脚本的命令行选项给出,如下所示:
#! /bin/bash
#PBS -q queue_name
#PBS -A account_name
#PBS -l nodes=12:ppn=12
#PBS -l walltime=18:00:00
#PBS -e /mypath/error.txt
#PBS -o /mypath/output.txt
或作为qsub的命令行选项,如:
qsub -o /mypath/output.txt -e /mypath/error.txt submit_job.sh
使用第一个选项我不认为你可以使用变量,因为shell不会看到被注释的行。另外我认为PBS会在shell之前处理注释行。如果您在调用qsub时知道路径,则可以尝试第二个选项。 或者,您可以尝试简单地重定向脚本本身的输出和错误:
/home/user1/run.sh $SEED > ${SEED}/output.txt 2> ${SEED}/error.txt
第三种选择可能是最简单的。可能仍会在运行目录中创建输出和错误文件,但它们可能是空的。
答案 1 :(得分:2)
乍一看,您需要在-o声明中围绕变量使用括号。
/home/user1/run.sh $SEED -o ${SEED}_output
否则bash正在寻找一个名为$ {SEED_output}的变量,该变量不存在。
答案 2 :(得分:0)
我遇到了同样的问题。 我的解决方法是:
#$ -N script-name
#$ -wd <path-to-project>/log
cd ..
在 qsub 脚本中。
现在错误和输出文件保存在 <path-to-project>/log
并且该脚本适用于 <path-to-project>
至少对我来说有效