web-dev-qa-db-fra.com

comment spécifier le fichier journal des erreurs et le fichier de sortie dans qsub

J'ai un script qsub comme

#####----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 

Le problème est-- il place tous les fichiers d'erreur et de sortie (job1.eJOBID & job1.oJOBID) dans le même répertoire à partir duquel j'exécute qsub submit_job.sh pendant que je veux enregistrer ces fichiers (fichier journal de sortie et d'erreur dans le même fichier différent) (spécifié comme $ SEED_output). J'ai essayé de changer la ligne comme

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

Mais ça n'a pas marché. Toute suggestion ?? Comment puis-je spécifier le chemin et le nom de la sortie par défaut et du fichier journal des erreurs ??

26
d.putto

En règle générale, les fichiers d'erreur et de sortie sont donnés sous forme de directives pbs dans le script qsub ou d'options de ligne de commande au script qsub comme suit:

#! /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

ou comme une option de ligne de commande pour qsub comme ceci:

qsub -o /mypath/output.txt -e /mypath/error.txt submit_job.sh

Avec la première option, je ne pense pas que vous puissiez utiliser une variable car le Shell ne regardera pas les lignes commentées. De plus, je pense que PBS traite les lignes commentées avant le Shell. Si vous connaissez le chemin lorsque vous appelez qsub, vous pouvez essayer la deuxième option. Vous pouvez également essayer de simplement rediriger la sortie et l'erreur dans le script lui-même:

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

La troisième option est probablement la plus simple. Les fichiers de sortie et d'erreur peuvent toujours être créés dans le répertoire d'exécution, bien qu'ils soient probablement vides.

35
Andy

À première vue, vous avez besoin de crochets autour de votre variable dans la déclaration -o.

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

Sinon, bash recherche une variable appelée $ {SEED_output} qui n'existe pas.

3
Andy