
STDOUT と STDERR を 2 つの別々のファイルにリダイレクトしながら実行する SQL スクリプトがあります。SQL スクリプトに最近問題が発生したため、SQL スクリプトによってエラーが返された場合は、スクリプトをエラーで終了したいと考えています。
現在は次のようになっています:
executeHiveSql insertEvent.sql --hivevar Date=${DATEYMD} > logs/inesrtEvent"${DATEYYYYMMDD}".log 2>logs/insertEvent"${DATEYYYYMMDD}".err
このSQLクエリの失敗を処理するために、条件チェックを追加したいと思います。これはリダイレクトの前に置くべきでしょうか、それとも後に置くべきでしょうか? IE
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; }
または
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
答え1
これは順序に関する質問に直接答えるものではありません。しかし、使用している構造が理解しにくい場合は、代わりにより単純な構造を使用することをお勧めします。すべてをワンライナーにすることに賞品はありません :)
if ! executeHiveSql ... > ... 2> ...; then
echo "Process FAILED!..."
log ...
exit 1
fi