我们可以使用Perl'inotify2.pm'perl模块来监视具有不同计算机的共享目录上的文件吗?

时间:2017-03-30 12:53:05

标签: perl monitor inotify inode

我的目的是监视目录中新创建的文件,并在多台计算机之间共享同一目录,下面是供您参考的脚本,一旦我运行脚本,该脚本识别从机器xyz创建的文件(我正在运行通知程序脚本)并且它无法识别来自机器abc的文件!有什么我需要考虑监视给定目录下新创建的文件吗?与创建文件的机器无关。

有没有办法使用'inotify2.pm'跟踪在不同机器上创建的文件?

use Linux::Inotify2;
my $inotify;
$inotify = new Linux::Inotify2 ;
my $dir="/home/vikas/";
opendir(DIR, $dir);

while(readdir DIR)
{
   print "$dir/$_\n";
  -d $_ and $inotify->watch($_,IN_CREATE, \&watch_new);
}
close DIR;
sub watch_new
{
  my $e = shift;
  my $name = $e->fullname;
  print "File was created! $name\n";
}
while(1)
{
  $inotify->poll;
}

1 个答案:

答案 0 :(得分:2)

不,你不能。 NFS没有这种方式工作。

inotify是一个内核钩子,它让内核通知'观察者'当'别的'更改文件。

但是内核并没有意识到远程文件系统的每一个变化,因为它有点疯狂,快速。所以它只能通知'对于通过内核的更改,实际上这意味着只有本地发生的事情。 (在某些情况下,这可能是远程文件系统,但通知不会传播)

如果你需要这样做,那么答案就是 - 不要将文件系统用作信号量机制。它经过优化,适用于休息时间。数据,而不是分布式进程之间的实时同步。请改用消息传递系统。我已经使用Redis发布/订阅这种类型的IPC,例如,它非常好用。