Perl inotify2 每次文件修改触发两次
Posted
技术标签:
【中文标题】Perl inotify2 每次文件修改触发两次【英文标题】:Perl inotify2 triggers twice for each file modification 【发布时间】:2013-10-01 12:18:45 【问题描述】:我正在编写一个监视文件更改的 Perl 脚本。
#!/usr/bin/perl
use strict;
use Linux::Inotify2;
my $inotify = new Linux::Inotify2 or die $!;
my $filename = "/tmp/foo";
my $counter = 0;
$inotify->watch (
$filename,
IN_MODIFY,
sub
++$counter;
print "changed: $counter\n";
) or die $!;
1 while $inotify->poll;
如果我像这样测试它,则每次 /tmp/foo 更改时都会调用此处理程序两次(增加 $counter 两次):
echo abc > /tmp/foo
为什么?
【问题讨论】:
【参考方案1】:按照@Lajos Veres 的建议使用>>
,或者观看CLOSE_WRITE
事件(即IN_CLOSE_WRITE 用于Linux::Inotify2
模块),
echo > /tmp/foo
inotifywait -m /tmp/foo
Setting up watches.
Watches established.
/tmp/foo MODIFY
/tmp/foo OPEN
/tmp/foo MODIFY
/tmp/foo CLOSE_WRITE,CLOSE
【讨论】:
Bareword "CLOSE_WRITE" not allowed while "strict subs"
尽管 IN_MODIFY 运行没有任何抱怨。什么给了?
试试 IN_CLOSE_WRITE【参考方案2】:
> 首先截断文件(我认为它本身也是修改)。试试>>。
【讨论】:
以上是关于Perl inotify2 每次文件修改触发两次的主要内容,如果未能解决你的问题,请参考以下文章
使用 Perl 和 Linux::Inotify2 模块监控 Mac 地址的日志文件
Perl Linux::Inotify2 - 不能再响应事件了
每次触发警报时,连接到逻辑应用 Webhook 的 Azure 警报操作都会触发两次