código de retorno de script individual, aunque se ejecutan en paralelo

código de retorno de script individual, aunque se ejecutan en paralelo

Tengo un archivo jar que se ejecuta en paralelo con varios nombres de tablas como argumentos usando nohupun comando en Unix

nohup java -jar batchorch.jar $tablename &

He utilizado las siguientes líneas para obtener el estado de todos los archivos jar.

oldpid=$!
wait $oldpid
echo $?

¿Cómo puedo obtener el estado de cada jararchivo individualmente aunque se estén ejecutando en paralelo?

Respuesta1

No conozco un método para manejar los procesos en segundo plano en el orden en que finalizan.

#!/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

Producción:

PID 29807: 0
PID 29808: 1
PID 29810: 2

Respuesta2

Con GNU Parallel la información está disponible en --joblog:

nohup parallel --joblog my.log java -jar batchorch.jar {} ::: table1 table2 table3

La columna relevante es 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

información relacionada