
Temos um script SQL que executamos enquanto redirecionamos STDOUT e STDERR para dois arquivos separados. Devido a problemas recentes com o script SQL, queremos sair do script com um erro caso o script SQL cause o retorno de um erro.
Atualmente lê-se:
executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err
Para lidar com a falha desta consulta SQL, quero adicionar uma verificação condicional. Devo colocar isso antes dos redirecionamentos ou depois? Ou seja
executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err || { echo 'Process FAILED! Please check the logs.' ; log $AUTO_JOB_NAME "Failure" 1 "Archive process FAILED..."; exit 1; }
ou
executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} || { echo 'Process FAILED! Please check the logs.' ; log $AUTO_JOB_NAME "Failure" 1 "Archive process FAILED..."; exit 1; } > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err
Responder1
Isso não responde diretamente à sua pergunta sobre o pedido, mas se a construção que você está usando for difícil de entender, sugiro que você use uma construção mais simples. Não há prêmios por fazer tudo de uma só vez :)
if ! executeHiveSql ... > ... 2> ...; then
echo "Process FAILED!..."
log ...
exit 1
fi