código de retorno de script individual, embora estejam sendo executados em paralelo

código de retorno de script individual, embora estejam sendo executados em paralelo

Eu tenho um arquivo jar que está sendo executado em paralelo com vários nomes de tabelas como argumentos usando nohupo comando no unix

nohup java -jar batchorch.jar $tablename &

Eu usei as linhas abaixo para obter o status de todos os arquivos jar

oldpid=$!
wait $oldpid
echo $?

Como posso obter o status de cada jararquivo individualmente, embora eles estejam sendo executados em paralelo?

Responder1

Não conheço um método para lidar com os processos em segundo plano na ordem em que terminam.

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

Saída:

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

Responder2

Com o GNU Parallel as informações estão disponíveis em --joblog:

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

A coluna relevante é 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

informação relacionada