
Tengo un archivo jar que se ejecuta en paralelo con varios nombres de tablas como argumentos usando nohup
un 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 jar
archivo 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