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

Can we use Perl 'inotify2.pm' perl module for monitoring file on the shared directories having different machines?

我的目的是监视目录中新创建的文件,同一目录在多台计算机之间共享,下面是供您参考的脚本,一旦我 运行 识别文件的脚本是从机器 xyz 创建(我在其中 运行ning 通知程序脚本)并且它无法识别来自机器 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;
}

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

inotify 是一个内核挂钩,它让内核在 'something else' 更改文件时通知 'watchers'。

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

如果您需要这样做,那么答案确实是——不要将文件系统用作信号量机制。它针对 'at rest' 数据进行了优化,而不是分布式进程之间的实时同步。请改用消息传递系统。我已经将 Redis 与 Publish/Subscribe 一起用于此类 IPC,例如,它工作得非常好。