paramètre pour les scripts shell qui a commencé avec qsub
-
29-09-2019 - |
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
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
.