2

TeradataTPTユーティリティのラッパースクリプトがあります。ラッパースクリプトは非常に単純ですが、問題は、ラッパーの終了ステータスがユーティリティの終了ステータスと同じではないことです。多くの場合、ユーティリティが失敗しても、スクリプトは0を返します。終了する前にいくつかの手順を実行する必要があるため、終了ステータスを別の変数に保存しましたが、この変数の値で終了すると機能しないようです。または、ログに他のステータスが明確に指定されている場合でも、一部の障害が発生した場合でも、ユーティリティはステータス0を返しますか?

さらに悪いことに、この動作は非常にランダムであり、ユーティリティの終了ステータスでスクリプトが失敗することがあります。ユーティリティの終了ステータスに問題があるかどうかを確認したいと思います。

スクリプトはKSHを介して実行されます。ラッパースクリプトの最後の部分は次のとおりです。

tbuild -f $sql.tmp -j ${id}_$JOB >$out 2>&1
ret_code=$?

cd ${TWB_ROOT}/logs
logpath=`ls -t ${TWB_ROOT}/logs/${id}_${JOB}*.out |head -1`
logpath1=${logpath##*/}
logname=${logpath1%-*}

tlogview -l ${logpath} > /edw/$GROUP/tnl/jobs/$JOB/logs/tpt_logs/${logname}.log

###Mainting 3 tpt binary log files
if [ $ret_code -eq 0 ] 
then 
    binout=$TPTLOGDIR/${logname}.dat
    binout1=$TPTLOGDIR/${logname}.dat1
    binout2=$TPTLOGDIR/${logname}.dat2

    [ -f $binout1 ] && mv $binout1 $binout2
    [ -f $binout ]  && mv $binout  $binout1

    mv "$logpath" "/edw/${GROUP}/tnl/jobs/$JOB/logs/tpt_logs/${logname}.dat"
fi

rm -f $sql.tmp
echo ".exit"
exit $ret_code

ヘルプと提案を事前に感謝します。

4

2 に答える 2

2

スクリプトは正常に見え、実際にはtbuildユーティリティと同じ終了コードを返すはずです。

それは、特定の製品に関する知識に帰着します。

私はこれらの製品を使用したことはありませんが、Teradata には Parallel Transporter の十分なユーザー ガイドがあり、明示的なポスト ジョブに関する考慮事項セクションがあり、次のように警告されています。

ジョブが正常に完了した場合でも、ジョブ ログおよびエラー テーブルのエラーおよび警告情報に基づいて、アクションが必要な場合があります。

したがって、技術的には、ジョブは完了する可能性がありますが、結果は時々変わる可能性があります。

独自のポリシーを定義し、ログファイルをスキャンして警告とエラー メッセージのパターンを調べ、セマンティック エラーに対して独自の終了コードを生成する必要があると思います。logstashまたはのようなツールsplunkが重宝します。


ところで、ファイルlogrotateのローテーションに使用することを検討してください$TPTLOGDIR/${logname}.dat

于 2014-02-15T23:57:51.827 に答える
1

疑わしいように、問題はユーティリティ自体にあったことが判明しました。シェルスクリプトはうまくいきました。

于 2014-03-04T10:21:33.360 に答える