Question

comment puis-je paramètrer un script shell qui est exécuté sur une grille (en commençant avec qsub)? J'ai un script shell, où j'utilise getopts pour lire les paramètres.

Quand je commence (qsub script.sh -r firstparam -s secondparam ..) ce script de travail avec qsub je reçois des messages d'erreur,

  

qsub: option non valide - s

     

qsub: valeur -r illégale

qsub pense que le paramètre sont pour lui-même. Pourtant, je ne l'ai pas trouvé de solution.

Merci

Était-ce utile?

La solution 3

Je viens de comprendre comment le résoudre: il suffit d'imprimer les commandes du scrip shell avec écho et conduit le résultat à qsub:

echo "./script.sh var1=13 var2=24" | qsub

Autres conseils

En utilisant l'option du qsub est la bonne façon:

qsub -v par_name=par_value[,par_name=par_value...] script.sh

par_name peut être utilisé comme variable dans le script shell.

En plus de la réponse de volk, afin de référencer les variables dans la liste (désignée par -v) vous utilisez simplement le nom que vous définissez dans votre appel. Alors, dites que vous avez fait un appel à qsub comme suit

qsub -v foo='qux' myRunScript.sh

Alors myRunScript.sh pourrait ressembler à ceci:

#!/bin/bash
#PBS -l nodes=1:ppn=16,walltime=0:00:59
#PBS -l mem=62000mb
#PBS -m abe

bar=${foo}
echo "${bar}"

Si la sortie serait

qux

Hope this helps!

Il y a une meilleure façon ...

Je suis vraiment surpris de voir combien de temps cette question est passée sans une bonne réponse. Il se peut que n'a pas été spécifié la version spécifique de qsub. qsub existe dans au moins couple et aussi Sun Grid Engine, peut-être d'autres ordonnanceurs. Ainsi, il est important de savoir que vous utilisez. Je vais parler de quelques-uns ici:

COUPLE: qsub -F <arguments> command

page man
Voici un exemple de la façon dont je l'utilise normalement. A partir de ce script exemple qui fait écho juste des arguments qui lui sont passés:

$ cat testArgs.pbs
#!/usr/bin/env bash

echo $@

Je dirais le travail comme celui-ci:

$ qsub -F "--here are the --args" testArgs.pbs
3883919.pnap-mgt1.cm.cluster

Voici ce que le fichier de sortie ressemble après son exécution:

$ cat testArgs.pbs.o3883919
--here are the --args

Sun Grid Engine: qsub command [ command_args ]

page man
Vous venez d'ajouter les arguments après la commande, comme vous le feriez lors de l'exécution dans la coquille. Je n'ai pas courir partout SGE, donc aucun exemple pour celui-ci. Mais c'est la même chose avec Slurm, ce qui est inférieur

Slurm: sbatch command [ command_args ]

page man
Ici, je soumets le même script je l'exemple ci-dessus Couple:

$ sbatch testArgs.sh what the heck
Submitted batch job 104331

Et les résultats:

$ cat slurm-104331.out
what the heck

Exportation des variables d'environnement! = Arguments passant

Exportation des variables d'environnement est très différent des arguments qui passe à une commande.
Voici une bonne discussion sur les différences.

Les réponses de qsub surtout recommandent -v. Pour être clair, les exportations de -v variables d'environnement, -F transmet des arguments à la commande.

Je préfère généralement mes scripts en paramétrez permettant des arguments. En fait, je dirais qu'il est beaucoup plus fréquent d'utiliser des scripts comme ça process_data.sh --threads 8 que de faire quelque chose comme export THREADS=8; process_data.sh.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top