Archiv verlassen und diese Seite im Standarddesign anzeigen : Script zum abschicken von vielen Jobs
Hallo,
ich bin Wissenschaftler an der Uni Jena und rechne ab und zu auf diesem Cluster hier: http://www.uni-jena.de/omega.html
Wenn ich normal einen Job von meinem Rechner abschicke dann gebe ich in das Open SSH Fenster etwa folgendes ein:
cd ~/ Verzeichnispfad
jobsubmit09 Eingabedatei
danach kommt die Abfrage in welcher Queue ich rechnen will.
Dann kommt die Abfrage wie lange ich rechnen will (in vollen stunden)
Dann eine Bestätigungsabfrage wo ich einfach mit mit Enter bestätigen muss
Nun habe ich aktuell ein Problem bei dem ich sehr viele Jobs (ca. 100) abschicken muss, dass ganze aber dann nicht mehr mit der Hand machen möchte.
Ich dachte mir, dass es doch möglich sein sollte ein script zu schreiben, was das oben beschriebene Abfragespiel automatisch durchmacht, dann das Verzeichnis wechselt und das ganze mit der nächsten Datei macht.
Nur Leider habe ich keinerlei Ahnung von der Erstellung solcher Scripte.
Es wäre ganz toll, wenn ihr mir bei der Erstellung eines solches Scriptes zur Hilfe kommen könntet !
Vielen Dank schon mal im Voraus.
Chemikus
sind die Eingaben (Queue und Dauer) zwingend manuell zu machen oder kannst Du die auch in einer .ini-Datei, per Kommandozeile direkt oder anderweitig übergeben?
Falls ersteres - google mal nach Here-Dokument und expect.
Nicht das ich wüsste aber es würde reichen wenn bei Queue immer big8 und Dauer 100 wäre
ok, in dem Fall würde ich es mal mit expect angehen - konkrete könnte man dann werden, wenn man wüsste, was denn da so "real" am System passiert (Ausgaben, Eingaben, ...)
http://www.thegeekstuff.com/2010/10/expect-examples/
was das Script im Grunde nur machen müsste wäre:
Verzeichnis des Inputfiles anfahren
jobsubmit09 Name_Inputfile
Enter
big8
Enter
100
Enter
Enter
und wieder von vorne bis die vorher definierten Inputfiles abgearbeitet sind
Hallo,
das Ganze Problem hat sich jetzt ein bisschen Vereinfacht. Das Script müsste nur noch den folgendne Befehl in der Kommandozeile ausführen:
jobsubmit09 <inputfile> -q short -t 100 -a y
Es wäre ganz toll wenn sich jemand finden würde, der mir die Syntax schreiben würde die diesen Befehl mit einer Reihe von Inputfiles abarbeitet. DANKE !
<inputfile> ist also eine Variable. Nennen wir die z.B. $inputfile.
... gehen wir dann noch davon aus, daß die $inputfiles alle in einem Verzeichnis liegen könnte man z.B. mit ls /Pfad/zum/Verzeichnis/* (oder mit find, ...) die entsprechende Liste erhalten, die man dann über eine Schleife for $inputfile in $(liste-erzeugen-befehl) abarbeiten könnte.
... sich dann noch ein paar Gedanken wegen der Dateinamen (Einschränkung auf Endungen, ggf. Quoting wegen Leer- und Sonderzeichen, ...) machen und das sollte es gewesen sein.
Jedes Inputfile hat die Endung .gjf Geg. kommt nach dem Inputfile noch noch ein zweites mit dem gleichen Namen aber der Endung .chk
Hallo,
also folgendes einfaches script funktioniert jetzt erstmal für beliebig viele Einträge:
#!/bin/bash
cd ~/Alanin/Test1
jobsubmit09 Ala_HF_6-31+Gdp_OPT.gjf -q oshort -t 100 -a y --dontaskchk
cd ~/Alanin/Test2
jobsubmit09 Ala_HF_6-31+Gdp_OPT.gjf -q oshort -t 100 -a y --dontaskchk
Was allerdings noch Toll wäre, wäre die Möglichkeit, dass das ganze eine zuvor eingegebene Liste von Verzeichnissen nach Dateien mit der Endung .gjf durchsucht und diese dann als Inputfile benutzt.
Könnt ihr mir da bitte weiterhelfen ich habe keine Ahnung wie man sowas realisiert.
Besten Dank !
Hallo,
nun sieht das Script so aus:
#!/bin/bash
#inputdir="homes/iomc/ja94won/Alanin/Test/"
for inputfile in `find /homes/iomc/ja94won/Juglon_Derivate/GS_Opt -name "*.gjf"` ; do
inputname=$(basename "$inputfile")
#echo "Inputdir: $inputdir"
echo "Inputfile: $inputfile"
echo "Inputname: $inputname"
jobsubmit09 ${inputfile} -q oshort -t 200 -a y --dontaskchk
done
es erfüllt erstmal seinen Zweck nun aber die Frage: Es gibt bei manchen Rechnungen noch ein zweites Inputfile mit der Endung .chk welches direkt nachdem ersten inputfile abgefragt wird. Gibt es einen Web dies auch noch in die For Schleife einzubauen ? Also das auch noch geschaut wird ob noch ein passendes .chk File mit dem gleichen Namen vorhanden ist und dieses dann benutzt wird ?
Beste Grüße,
Chemikus
basename kennt noch eine weitere Option, die ein def. Endung abschneidet und also den reinen Dateinamen, ohne Endung, zurückliefert.
Du könntest also nach dem Durchlauf des ersten jobsubmit mit einer if-Abfrage testen, ob mit dem reinem Dateinamen und der def. Endung eine Datei existiert und diese dann übergeben.
Wer die Bash benutzt, braucht gar kein basename:
#!/bin/bash
for inputfile in `find /homes/iomc/ja94won/Juglon_Derivate/GS_Opt -name "*.gjf"` ; do
inputname="${inputfile##*/}"
#echo "Inputdir: $inputdir"
echo "Inputfile: $inputfile"
echo "Inputname: $inputname"
jobsubmit09 ${inputfile} -q oshort -t 200 -a y --dontaskchk
chkfile="${inputfile%.*}.chk"
if [ -f "$chkfile" ]; then
echo "Chkfile: $chkfile"
# ...
fi
done
Eine For-Schleife funktioniert übrigens nur richtig, wenn keine Leer- und sonstigen Sonderzeichen in den Dateinamen sind.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.