如何保护文件免受多个perl应用程序访问



我有一个/root/abc/sample.xml文件,许多其他应用程序(大约2000个应用程序)正在并行访问该文件。因此,你能建议我任何机制,让所有应用程序非常安全地访问这个文件/root/abc/sample.xml,而不会损坏任何文件吗。我是perl编程的初学者。

每个应用程序都将读取此文件,并在处理完成后将其关闭。

有一些文件锁定解决方案可以考虑到这一点;羊群是一体的。它提供了一种文件锁定(flock())方法,等待文件空闲,然后锁定并解锁(unlock())。

以你为例,你可以这样做;

#!/usr/bin/env perl
use strict;
# import LOCK_* and SEEK_END constants
use Fcntl qw(:flock SEEK_END);
# Open the file
open(my $xml, ">>", "sample.xml") or die "Can't open xml $!";
# Lock the file
flock($xml, LOCK_EX) or die "Cannot lock xml - $!n";
# Someone may have changed the file while waiting for lock
# Either re-read or seek to end depening on what your doing.
# We are just going to append some stuff so will seek to end
# for this example
seek($xml, 0, SEEK_END) or die "Cannot seek - $!n";
# Do some stuff
print $xml "<foo>bar</foo>" ,"nn";
# Unlock
flock($xml, LOCK_UN) or die "Cannot unlock xml - $!n";

如果您的所有应用程序都只是从文件中读取(而不是写入),那么就没有问题。您可以将文件权限设置为只读以确保。

只有当至少有一方试图更新文件时,数据损坏才是问题。

如果您需要写访问权限,您还可以使用锁(文件锁定)或分布式锁定服务,如ZooKeeper+Net::ZooKeeper模块(可能会过度使用)。

最新更新