
Eu tenho um arquivo jar que está sendo executado em paralelo com vários nomes de tabelas como argumentos usando nohup
o 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 jar
arquivo 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