大容量ファイルのバックアップ

大容量ファイルのバックアップ

競合が発生するテスト実行があります。衝突する前にどれだけ遠くに行ったか調べなければなりません。クラッシュ後に再起動し、ログファイルが消去されます。しかし、この拭き取りには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

テストがクラッシュし始める行でデバッグをオンにします。以下に説明する技術のいずれかを使用できます。

  1. 呼び出しスクリプトでのフルスクリプトのデバッグ

    bash -x /testCode/startTest.sh $ARGS
    
  2. スクリプト自体のデバッグ

    または、このスクリプトを制御できる場合は、次のように上部にshebang行を追加できます。

    #!/bin/bash -x
    
  3. コードの特定部分のデバッグ

    または、さらに詳細が必要なスクリプト部分でこれを行うこともできます。

    line1
    line2
    
    set -x
    line3
    line4
    set +x
    
    line5
    

おすすめ記事