【问题标题】:Can we use Perl 'inotify2.pm' perl module for monitoring file on the shared directories having different machines?我们可以使用 Perl 'inotify2.pm' perl 模块来监视具有不同机器的共享目录上的文件吗?
【发布时间】:2017-08-24 09:55:28
【问题描述】:

我的目的是监视目录中新创建的文件,并且同一目录在许多计算机之间共享,以下是供您参考的脚本,一旦我运行该脚本,该脚本就可以识别从机器 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;
}

【问题讨论】:

    标签: perl monitor inotify inode


    【解决方案1】:

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

    inotify 是一个内核挂钩,它让内核在“其他”更改文件时通知“观察者”。

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

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

    【讨论】:

    • 你能分享几个例子,我可以参考消息传递系统吗?
    • 这是真的,如果你挂载 NFS 没有共享集群。但是有了这个选项,我们必须检查它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 2011-11-21
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多