0

でバックアップを取っていrsnapshotます。バックアップへのパスは次のようになります。

name=$(date +"%Y-%m-%d_%H-%M")
/backup/hourly.0/"$name"

perl スクリプトでは、さまざまなスナップショットから選択してdiffs、ホーム ディレクトリ内のファイルに作成します。

my $backup = '/backup';

opendir my $dh, $backup or die $!;
my @versions;
while ( defined( my $version = readdir $dh ) ) {
    # ...
    push @versions, $version;
}
# choose from @versions
# do something with the choosen

rsnapshotスクリプトの実行中にスナップショットのローテーションが開始されないように、バックアップ ディレクトリをロックする方法はありますか?

4

1 に答える 1

2

排他ロックではファイルを読み取りおよび書き込み用に開く必要があり、ディレクトリを読み取りおよび書き込み用に開くことができないため、排他ロックでディレクトリをロックすることはできません。代わりにファイルをロックすることもできますが、ファイルのロックは推奨事項であることに注意してください。したがってrsnapshot、ディレクトリもロックしない場合は、それをロックしていることになり、他の誰もあなたのロックに注意を払っていないため、何も達成されません。

いくつかのオプション:

  • ディレクトリ内にロック ファイルを作成し、スクリプト内で排他的にロックします。rsnapshotまた、それをロックするスクリプトを呼び出します。
  • .0、などの代わりにタイムスタンプをファイル名の末尾に付ける命名スキームを使用して、.1それらをローテーションする必要がないようにします。
  • スキャン中に消えるディレクトリに対して、スキャン スクリプトを堅牢にします。ディレクトリが消えた場合は、無視するかスキャンを再開してください。
于 2012-04-05T16:41:07.197 に答える