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

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

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

答え2

テストログファイルの方法を変更できないようです。

しかし、私は2つの方法を提案できます。

  1. 本当に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
    

    ちなみに、私は最初にファイルを移動してコピーしました。異なるファイルシステム間でファイルを移動するには、まずコピーしてから削除する必要があるためです。これは、ファイルの移動時にテストがファイルを上書きする状況を引き起こす可能性があることを意味します。

  2. Tシャツを使う

    問題がいつ発生するかを知っている場合は、次のことができます。

    tail -f logfile |tee newlog
    

    これは、新しいログファイルの作成中におおよそのログファイルに表示されます。

  3. テストでログファイルを生成する方法を変更して、ログファイルの循環を実行します。

関連情報