I am writing a Perl script which monitors a file for changes.
#!/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;
This handler is called twice (incrementing $counter twice) each time /tmp/foo changes if I test it like this:
echo abc > /tmp/foo
Why?
Either use >>
as @Lajos Veres suggested, or watch on CLOSE_WRITE
event (that is IN_CLOSE_WRITE for Linux::Inotify2
module),
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
The > truncates first the file (I think it is a modification itself also). Try with >>.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With