Rückgabecode einzelner Skripte, obwohl diese parallel ausgeführt werden

Rückgabecode einzelner Skripte, obwohl diese parallel ausgeführt werden

Ich habe eine JAR-Datei, die parallel mit mehreren Tabellennamen als Argumente ausgeführt wird, mit nohupdem 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 jarDatei 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

verwandte Informationen