競合が発生するテスト実行があります。衝突する前にどれだけ遠くに行ったか調べなければなりません。クラッシュ後に再起動し、ログファイルが消去されます。しかし、この拭き取りには10分かかります。したがって、9分ごとにログファイルを保存すると、ログファイルを取得できます。
問題は、ログファイルを特定の場所にコピーし、コピーされたファイルがターゲットファイルより大きい場合に既存のファイル(存在する場合)のみを上書きするbashスクリプトを作成する方法です。そうでなければ放しておきたいです。
25 if [ -f $testFile ]; then
26 COUNT=`cat $testFile|wc -l`
27 if [ $COUNT -gt 0 ];then
28 ARGS=`head -1 $testFile`
29 echo "Executing test for ARGS"
30 sed -i '1d' $testFile
31 cd /testCode; sleep 600
この時点で、コードは前述のように10分間待機状態になります。
32 /testCode/startTest.sh $ARGS
これにより、ログファイルの削除テストが開始されます。テストが競合しない場合、テストが完了すると次のコマンドに進みます。それ以外の場合は、一番上から再起動してください。
33 `wall "System is going down for reboot in 600 seconds. Please save your work"`
34 sleep 600
35 /sbin/reboot &
36 exit 0
37 fi
38 fi
アップデート#1
私は方法を調べた。だからテストが始まると、最後の実行ログを保存します。その後、再起動のテスト中にログを確認するのに十分な時間があります。テストは通常、1時間後にセグフォルトが原因でクラッシュします。これにより、ログを確認するのに十分な時間が発生します。
これは実際にきれいなアプローチではありませんが、うまくいきます。 @Alexandre Alvesも素晴らしい答えを提供しました。それも大丈夫です。 @Slmは素晴らしい答えを提供しましたが、残念ながらログファイルが複雑になるため、私のような大規模なテストでは機能しません。
また、私の問題は、ロギング自体ではなくログファイルを保存することです。
答え1
テストがクラッシュし始める行でデバッグをオンにします。以下に説明する技術のいずれかを使用できます。
呼び出しスクリプトでのフルスクリプトのデバッグ
bash -x /testCode/startTest.sh $ARGS
スクリプト自体のデバッグ
または、このスクリプトを制御できる場合は、次のように上部にshebang行を追加できます。
#!/bin/bash -x
コードの特定部分のデバッグ
または、さらに詳細が必要なスクリプト部分でこれを行うこともできます。
line1 line2 set -x line3 line4 set +x line5
答え2
テストログファイルの方法を変更できないようです。
しかし、私は2つの方法を提案できます。
本当にbashスクリプトが欲しいなら
#!/bin/bash source_size=`du -b file1|cut -f 1` destin_size=`du -b file2|cut -f 1` if [ $source_size -gt $destin_size ]; then mv file1 file1.bck touch file1 cp file1.bck /destination/file2 rm file1.bck fi
ちなみに、私は最初にファイルを移動してコピーしました。異なるファイルシステム間でファイルを移動するには、まずコピーしてから削除する必要があるためです。これは、ファイルの移動時にテストがファイルを上書きする状況を引き起こす可能性があることを意味します。
Tシャツを使う
問題がいつ発生するかを知っている場合は、次のことができます。
tail -f logfile |tee newlog
これは、新しいログファイルの作成中におおよそのログファイルに表示されます。
テストでログファイルを生成する方法を変更して、ログファイルの循環を実行します。