Parameter für Shell-Skripte, die mit qsub gestartet
-
29-09-2019 - |
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
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.