2012-04-05 31 views
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没有开始,而我跑我的脚本来旋转快照?

回答

2

您无法使用排他锁锁定目录,因为排他锁要求打开文件以进行读取和写入,并且无法打开目录以便读取&书写。您可以改为锁定文件,但请记住文件锁定是建议的。因此,如果rsnapshot不锁定目录,那么您将锁定它,并且没有其他人注意到您的锁,并且它没有完成任何操作。

一些选项:

  • 创建目录内的锁定文件,并只在您的脚本将其锁定。也有调用rsnapshot锁定它的脚本。
  • 使用一个命名方案,后缀名带有时间戳,而不是.0,.1等等,这样你就不需要旋转它们。
  • 使扫描脚本对扫描时消失的目录有效。如果目录消失,请忽略它或重新开始扫描。