Dummy.sh
データをロードし、fix.sh
問題のあるデータを修正してからデータをロードするユースケースがあります。回復スクリプトが3回の試行以内に問題を解決できない場合は、再試行ロジックを実装する必要があります。
ただし、あるスクリプトが無限ループで別のスクリプトを呼び出す再帰呼び出しが発生します。
誰でも私のエラーを指摘したり、他の解決策を提案したりできますか?
dummy.sh
#!/bin/bash -x
echo "Load data"
/home/user/etc/fix.sh
修正する
#!/bin/bash -x
TEMCOUNTER_TMP=FILE_NAME"_tmp6"
RETRY_C=0
echo $RETRY_C > $TEMCOUNTER_TMP
RETRY_LOGIC=`cat /home/user/etc/$TEMCOUNTER_TMP`
echo $RETRY_LOGIC
while [ $RETRY_LOGIC -le 3 ]
do
/home/user/etc/Dummy.sh
RETRY_LOGIC=`expr $RETRY_LOGIC + 1`
echo $RETRY_LOGIC > $TEMCOUNTER_TMP
done
オペレーティングシステム:SunOS 5.10 Generic_144488-06 sun4u sparc SUNW、Sun-Fire-V210
PS:呼び出し以外のDummy.shでは、いかなるロジックも実装できません。fix.sh
ベストアンサー1
これにはいくつかの問題があります。デフォルトでは、2つのループを繰り返します。 1つは内部fix.sh
(whileループを使用)であり、コールバックを介して再び繰り返されますdummy.sh
。また、最初からカウンタファイルをゼロにリセットするのでfix.sh
計算されません。逆方向に注文することもできるので、dummy.sh
カウンタをインクリメントする前に(再帰)呼び出しが発生します。
再帰的な動作のみが必要であるとします(dummy.shを変更できるため)。
修正する
#!/bin/bash -x
TEMCOUNTER_TMP=/home/user/etc/FILE_NAME"_tmp6"
RETRY_LOGIC=`cat $TEMCOUNTER_TMP`
echo $RETRY_LOGIC
# Does RETRY_LOGIC have a value?
if [ -z "$RETRY_LOGIC" ]
then
RETRY_LOGIC=0
echo 0 > $TEMCOUNTER_TMP
fi
# Try to apply fix
[ $((RANDOM %3)) = 0 ]
# Did it work?
if [ $? = 0 ]
then
echo "Success!"
rm $TEMCOUNTER_TMP
exit
fi
if [ $RETRY_LOGIC -le 3 ]
then
export RETRY_LOGIC=`expr $RETRY_LOGIC + 1`
echo $RETRY_LOGIC > $TEMCOUNTER_TMP
echo "Retrying..."
/home/user/etc/Dummy.sh
else
echo "Giving up"
rm $TEMCOUNTER_TMP
fi
また、パスをもう一度確認してください。TEMCOUNTER_TMP
変数プレフィックスは1つの場所にのみ付けられました。/home/user/etc/
ご注意ください、export
このコマンドは$RETRY_LOGIC
後続の試行で使用できるため、変数が他の場所で使用されていない限り、参照されているすべての行を削除でき、TEMCOUNTER_TMP
同じように機能します。もしあなたならするこのファイルは必須です。参考にしてください。罠後で掃除する方が良いかもしれません。