如何在 qsub 中指定错误日志文件和输出文件

Posted

技术标签:

【中文标题】如何在 qsub 中指定错误日志文件和输出文件【英文标题】:how to specify error log file and output file in qsub 【发布时间】:2012-02-24 04:48:19 【问题描述】:

我有一个 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

但它没有用。有什么建议吗??如何指定默认输出和错误日志文件的路径和名称??

【问题讨论】:

我在 slurm #SBATCH --output="demo.%j.%N.out" #SBATCH --error="demo.%j.%N.err",我如何适应 qsub? 相关:community.openpbs.org/t/…How to include the job id and other info in the output file for qsub? 【参考方案1】:

我遇到了同样的问题。 我的解决方法是:

#$ -N script-name
#$ -wd <path-to-project>/log 
cd ..

在 qsub 脚本中。 现在错误和输出文件保存在&lt;path-to-project&gt;/log 并且脚本适用于&lt;path-to-project&gt; 至少对我来说有效

【讨论】:

【参考方案2】:

通常错误和输出文件在 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

第三个选项可能是最简单的。输出和错误文件可能仍会在运行目录中创建,尽管它们可能是空的。

【讨论】:

我可以在#PBS -o 行中使用像 $PBS_JOBID 这样的 PBS 变量。 @gerardw 也许这取决于工具的版本?我无法在 #PBS -o 行中使用 PBS 变量(变量未解析)。 我在 slurm #SBATCH --output="demo.%j.%N.out" #SBATCH --error="demo.%j.%N.err",我如何适应 qsub? 如果你想包含jobid号和其他类似的信息怎么办?【参考方案3】:

乍一看,您需要在 -o 声明中将变量括起来。

/home/user1/run.sh $SEED -o $SEED_output

否则 bash 正在寻找一个名为 $SEED_output 的变量,该变量不存在。

【讨论】:

感谢您提到这一点,但我仍然没有运气:( 我试过 /home/user1/run.sh $SEED -o $SEED_output 并没有任何改变。只是为了让事情清楚 $ SEED(或 $SEED)是目录的路径。所以我认为输出应该保存在 $SEED 目录中的文件 _output 中!!! -o 被传递给 run.sh,因此除非 run.sh 将 -o 作为命令行参数处理,否则它将不起作用。 我在 slurm #SBATCH --output="demo.%j.%N.out" #SBATCH --error="demo.%j.%N.err" 中使用过,如何使其适应 qsub? 如果你想包含jobid号和其他类似的信息怎么办?

以上是关于如何在 qsub 中指定错误日志文件和输出文件的主要内容,如果未能解决你的问题,请参考以下文章

获取日志输出的行号和文件名

MySQL 日志管理

如何使用 datePattern 在 log4net 中指定绝对文件路径?

Snort日志文件输出格式

如何用新文件覆盖 log4j2.xml 中指定的日志文件名?

容器在启动时重定向日志文件的方法