Batch-processing (Kopflos)
Headless Batch-Processing führt Simulationen auf einem Computer ohne grafischen Desktop und ohne Aufsicht durch. Seine Grundlage ist der job: eine Simulation, die als unabhängiger Prozess läuft und weiterläuft, nachdem das Terminal, das es gestartet hat, geschlossen wurde.
Arbeitsplätze
axqua submit <case-file> --kind steady
Der Befehl erstellt einen Job, startet ihn im Hintergrund, druckt die Job-ID aus und kehrt sofort zurück. Der Terminal kann dann geschlossen und eine Verbindung zu einem entfernten Computer beendet werden. Folgende Job-Arten gibt es:
Art |
Funktion |
|---|---|
|
Erstellen Sie das TELEMAC-Modell. |
|
Führen Sie die stetige 2D-Simulation aus. |
|
Führen Sie die Simulation mit einem variierenden Abfluss aus. |
|
Schreiben und Ausführen des TELEMAC-3D-Modells. |
|
Führen Sie die Netzkonvergenzstudie durch. |
|
Führen Sie die Studie der Anzahl der vertikalen Layer. |
|
Erstellen und Ausführen des OpenFOAM-Modells. |
|
Bauen und führen Sie die Simulation von Feinsediment über einem Festbett (OpenFOAM Setup). |
|
Führen Sie die Bayessche Kalibrierung aus. |
Einstellungen eines einzelnen Durchlaufs werden mit --option und die Anzahl der Prozessorkerne mit --np:
axqua submit <case-file> --kind mesh-convergence --np 16 --option tolerance=0.05
Eine unbekannte Option wird abgelehnt, bevor der Job erstellt wird.
Jeder Job hat seinen eigenen Ordner in der Job-Root. Der Standardjob ist ~/.local/share/axqua/jobs. Ein anderer Ordner wird mit --job-root oder mit der Umgebungsvariable AXQUA_JOB_ROOT ausgewählt.
<job-root>/2026-08-14-my-reach-steady-a3f19c/
job.json the task, including a copy of the case settings
status.json the current state and progress
runner.log the log of aXqua for this job
solver/ the output of the simulation code
results/ a list of the result files
Der Job speichert die Einstellungen des Falls zum Zeitpunkt der Einreichung. Eine spätere Änderung der Fall-Datei hat keinen Einfluss auf einen laufenden Job und ein abgeschlossener Job bleibt reproduzierbar.
Überwachungs- und Kontrollaufgaben
axqua list # all jobs with their state
axqua status <job-id> # state and progress of one job
axqua status <job-id> --watch 30 # wait until the job has ended
axqua logs <job-id> --follow # follow the log
axqua logs <job-id> --solver # output of the simulation code
axqua cancel <job-id> # stop the job
Ein Job läuft durch die Zustände QUEUED, STARTING, RUNNING und POSTPROCESSING und endet als COMPLETED, FAILED oder CANCELLED. Wenn der Prozess eines Jobs verschwindet, zum Beispiel weil der Computer neu gestartet wurde, kennzeichnet die nächste Statusabfrage den Job als FAILED. Ein Job bleibt daher niemals aus Versehen im Zustand RUNNING.
Um einen gescheiterten Job zu untersuchen, lesen Sie zuerst runner.log. Es enthält den Fehler mit einem Code und einem vorgeschlagenen Heilmittel (Fehlerbehebung). Der Befehl axqua execute <job-id> wiederholt den Job im Vordergrund, so dass alle Nachrichten im Terminal erscheinen.
Sequenzen von Arbeitsplätzen
TELEMAC-Jobs von einem Fall laufen einen nach dem anderen. Ein Job, der eingereicht wird, während ein anderer Job des gleichen Falls läuft, wartet, bis dieser Job beendet ist, so dass die Schritte einer Sequenz in direkter Folge eingereicht werden können. Die Builds der OpenFOAM-Modelle und der Feinsediment-Simulation warten in der gleichen Reihenfolge, da sie vom stetigen 2D-Ergebnis ausgehen. Ein Lauf des OpenFOAM-Modells (openfoam-run) wartet nicht: Senden Sie es, wenn sein Build beendet ist. Ein Wartejob überprüft nicht, ob der vorherige Job erfolgreich war. Das folgende Skript für Linux führt daher den Preprocessing, den Trockenlauf und die Netzkonvergenzstudie eines Falls nacheinander aus und stoppt, wenn ein Schritt fehlschlägt:
#!/bin/bash
CASE=cases/my-reach/my-reach.axq-case
run_step () {
job=$(axqua submit "$CASE" --kind "$1" --json | python -c "import json, sys; print(json.load(sys.stdin)['data']['job_id'])")
axqua status "$job" --watch 30 > /dev/null
state=$(axqua status "$job" --json | python -c "import json, sys; print(json.load(sys.stdin)['data']['state'])")
echo "$1: $state ($job)"
[ "$state" = "COMPLETED" ] || exit 1
}
run_step preprocessing
run_step steady
run_step mesh-convergence
Starten Sie ein solches Skript mit nohup bash my-study.sh &, damit es nach dem Schließen von Terminal fortgesetzt wird.
Um einen Schritt für mehrere Abflüsse zu wiederholen, erstellen Sie eine Fall-Datei pro Abfluss und rufen Sie run_step in einer Schleife über die Fall-Dateien auf.
Wie Jobs losgelöst werden
aXqua liest die Umgebung der Simulationssoftware einmalig, wenn ein Auftrag eingereicht wird und übergibt diesen direkt an den Auftrag. Der Job hängt daher nicht von den Einstellungen des Terminal ab, von dem aus er gestartet wurde. Die Methode des Ablösens hängt vom Betriebssystem ab und wird automatisch ausgewählt:
Trägerrakete |
Methode |
|---|---|
|
Ein Benutzerdienst des Linux-Systems. Bevorzugt unter Linux. |
|
Eine separate Prozessgruppe. Wird unter Linux und macOS verwendet, wenn keine Benutzerdienste verfügbar sind, beispielsweise in einigen Remote-Sitzungen. |
|
Ein Windows-Auftragsobjekt. |
|
Ein Prozess im Windows-Subsystem für Linux. |
Ein weiterer Launcher wird mit --launcher ausgewählt. Die Launcher windows und wsl wurden noch nicht auf einer echten Windows-Installation getestet.
Wenn Sie einen Job stornieren, wird der Job zuerst aufgefordert, sich selbst zu beenden, damit er seine Dateien schließen kann. Wenn der Job nicht innerhalb von 20 Sekunden reagiert, stoppt aXqua alle seine Prozesse, einschließlich der parallelen Prozesse des Simulationscodes.