Frage

Wie kann ich ein Shell-Skript parametrisieren, die auf einem Raster (begann mit qsub) ausgeführt wird? Ich habe einen Shell-Skript, wo ich getopts verwenden, um die Parameter zu lesen.

Wenn ich starte (qsub script.sh -r firstParam es secondParam ..) das Arbeitsskript mit qsub Ich erhalte Fehlermeldungen,

  

qsub: ungültige Option - s

     

qsub: illegal -r Wert

als qsub den Parameter denkt sind für sich. Doch ich gefunden habe, keine Lösung.

Danke

War es hilfreich?

Lösung 3

Ich dachte nur, wie es zu lösen: drucken nur die Befehle der Schale Scrip mit Echo und Rohr das Ergebnis qsub:

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

Andere Tipps

Mit der Option -v qsub Verwendung ist der richtige Weg:

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

par_name kann als Variable in dem Shell-Skript verwendet werden.

Neben volk Antwort, um die Variablen in der Liste zu verweisen (durch -v) Sie verwenden einfach den Namen, den Sie in Ihrem Anruf definieren. Also, sagen Sie einen Anruf zu qsub gemacht wie folgt

qsub -v foo='qux' myRunScript.sh

Dann myRunScript.sh könnte wie folgt aussehen:

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

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

Wenn der Ausgang sei

qux

Hope, das hilft!

Es gibt einen besseren Weg ...

Ich bin wirklich überrascht, wie lange diese Frage ohne eine gute Antwort gegangen ist. Es kann sein, dass die spezifische Version von qsub nicht angegeben wurde. qsub existiert in mindestens Drehmoment und auch Sun Grid Engine, vielleicht andere Disponenten. So ist es wichtig, zu wissen, welche Sie verwenden. Ich werde über ein paar hier sprechen:

MOMENT: qsub -F <arguments> command

Manpage
Hier ist ein Beispiel dafür, wie ich es normalerweise verwenden. Beginnend mit diesem Beispiel-Skript, das alle Argumente nur Echos übergeben, um es:

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

echo $@

würde ich den Job wie dieser einreichen:

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

Und das ist, was die Ausgabedatei aussieht, nachdem es läuft:

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

Sun Grid Engine: qsub command [ command_args ]

Manpage
Sie haben soeben die Argumente nach dem Befehl, gleiche hinzufügen, wie würden Sie, wenn sie in der Shell ausgeführt wird. Ich habe keine SGE überall laufen, so dass kein Beispiel für diese ein. Aber es ist das gleiche mit Slurm, die unterhalb

Slurm: sbatch command [ command_args ]

Manpage
Hier stelle ich das gleiche Skript, das ich mit dem Drehmoment Beispiel oben verwendet:

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

Und die Ergebnisse:

$ cat slurm-104331.out
what the heck

Exportieren von Umgebungsvariablen! = Geben Argumente

Umgebungsvariablen exportieren ist sehr verschieden von Argumenten auf einen Befehl übergeben.
Hier ist eine gute Diskussion über die Unterschiede.

Die qsub Antworten vor allem empfehlen -v. Um es klar, -v Exporte Umgebungsvariablen, -F gibt Argumente für den Befehl.

Ich ziehe es im Allgemeinen, indem sie für meine Skripte Argumente parametrieren. In der Tat würde ich sagen, es ist viel häufiger wie diese process_data.sh --threads 8 Skripte zu verwenden, als so etwas wie export THREADS=8; process_data.sh tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top