как указать файл журнала ошибок и выходной файл в qsub - PullRequest
24 голосов
/ 01 февраля 2012

У меня есть сценарий 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

, но это не сработало. Любойпредложение? Как я могу указать путь и имя файла вывода по умолчанию и файла журнала ошибок?

Ответы [ 2 ]

35 голосов
/ 02 февраля 2012

Обычно файлы ошибок и выходных файлов задаются в виде директив pbs в сценарии qsub или в качестве параметров командной строки для сценария 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

С первым вариантом я не думаю, что вы можете использовать переменную, так как оболочка не будет смотреть на закомментированные строки. Кроме того, я думаю, что PBS имеет дело с закомментированными строками до того, как это сделает оболочка. Если вы знаете путь при вызове qsub, вы можете попробовать второй вариант. В качестве альтернативы вы можете просто перенаправить вывод и ошибку в самом скрипте:

/home/user1/run.sh $SEED > ${SEED}/output.txt 2> ${SEED}/error.txt

Третий вариант, вероятно, самый простой. Файлы вывода и ошибок могут по-прежнему создаваться в каталоге выполнения, хотя они, вероятно, будут пустыми.

3 голосов
/ 02 февраля 2012

На первый взгляд, вам нужно заключить скобки в переменную в объявлении -o.

/home/user1/run.sh $SEED -o ${SEED}_output

В противном случае bash ищет переменную с именем $ {SEED_output}, которая не существует.

...