我怎么能锁定一个目录?

时间:2012-04-05 16:07:38

标签: perl locking directory rotation

我正在使用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不会开始旋转快照?

1 个答案:

答案 0 :(得分:2)

您无法使用独占锁锁定目录,因为独占锁需要打开文件进行读写,并且无法打开目录以进行读取和写入。写作。您可以改为锁定文件,但请记住文件锁是建议性的。因此,如果rsnapshot也没有锁定目录,那么你将锁定它,没有其他人注意你的锁,它没有完成任何事情。

一些选项:

  • 在目录中创建一个锁定文件,并将其专门锁定在脚本中。还有调用rsnapshot锁定它的脚本。
  • 使用带有时间戳而不是.0.1等文件名后缀的命名方案,以便您无需旋转它们。
  • 使扫描脚本对扫描时消失的目录具有可靠性。如果目录消失,请忽略它或重新开始扫描。