
Ich habe eine JAR-Datei, die parallel mit mehreren Tabellennamen als Argumente ausgeführt wird, mit nohup
dem Befehl in Unix
nohup java -jar batchorch.jar $tablename &
Ich habe die folgenden Zeilen verwendet, um den Status aller JAR-Dateien abzurufen
oldpid=$!
wait $oldpid
echo $?
Wie kann ich den Status jeder jar
Datei einzeln abrufen, obwohl sie parallel ausgeführt werden?
Antwort1
Mir ist keine Methode bekannt, die Hintergrundprozesse in der Reihenfolge abzuwickeln, in der sie beendet werden.
#!/bin/bash
declare -a bg_pids
ec=0
(sleep 10; exit "$ec") &
bg_pids+=($!)
((ec++))
(sleep 10; exit "$ec") &
bg_pids+=($!)
((ec++))
(sleep 10; exit "$ec") &
bg_pids+=($!)
((ec++))
for pid in "${bg_pids[@]}"; do
echo -n "PID ${pid}: "
wait -f "$pid"
echo $?
done
Ausgabe:
PID 29807: 0
PID 29808: 1
PID 29810: 2
Antwort2
Mit GNU Parallel sind die Informationen verfügbar in --joblog
:
nohup parallel --joblog my.log java -jar batchorch.jar {} ::: table1 table2 table3
Die relevante Spalte ist Exitval:
Seq Host Starttime JobRuntime Send Receive Exitval Signal Command
1 : 1597644202.601 0.003 0 0 1 0 java -jar batchorch.jar table1
2 : 1597644202.604 0.008 0 0 1 0 java -jar batchorch.jar table2
3 : 1597644202.613 0.005 0 0 1 0 java -jar batchorch.jar table3