Perlで複数のファイルを監視する必要があり、Linux::Inotify2を使用しています。ただし、監視対象の最初のファイルを変更してヒットし、次に2番目、次に最初のファイルなどをヒットする必要があるという問題が発生しています。
たとえば、2番目のファイルが最初のファイルの前に変更された場合、それはトリガーされません。または、最初のファイルが2回続けてトリガーされ、2番目のファイルが間にトリガーされない場合です。
これは私が使用しているコードのセクションで、この問題が発生しています。
my $inotify = new Linux::Inotify2;
my $inotify2 = new Linux::Inotify2;
$inotify->watch ("/tmp/rules.txt", IN_MODIFY);
$inotify2->watch ("/tmp/csvrules.out", IN_MODIFY);
while () {
my @events = $inotify->read;
unless (@events > 0){
print "read error: $!";
last ;
}
foreach $mask (@events) {
printf "mask\t%d\n", $mask;
open (WWWRULES, "/tmp/rules.txt");
my @lines = <WWWRULES>;
foreach $line (@lines) {
@things = split(/,/, $line);
addrule(@things[0], @things[1], @things[2], @things[3], trim(@things[4]));
print "PRINTING: @things[0], @things[1], @things[2], @things[3], @things[4]";
close (WWWRULES);
open (WWWRULES, ">/tmp/rules.txt");
close (WWWRULES);
}
}
my @events2 = $inotify2->read;
unless (@events2 > 0){
print "read error: $!";
last ;
}
foreach $mask (@events) {
printf "mask\t%d\n", $mask;
open (SNORTRULES, "/tmp/csvrules.out");
my @lines2 = <SNORTRULES>;
foreach $line2 (@lines2) {
@things2 = split(/,/, $line2);
addrule("INPUT", @things2[0], @things2[1], @things2[2], trim(@things2[3]));
print "PRINTING: INPUT, @things2[0], @things2[1], @things2[2], @things2[3]";
close (SNORTRULES);
open (SNORTRULES, ">/tmp/csvrules.out");
close (SNORTRULES);
}
}
}
理想的には3つのファイルを見たいのですが、2つは動作しないので、この段階では少し無意味に思えます。
助けてくれてありがとう!