Linuxサーバー上のディレクトリにファイルが作成されたら処理するってのをやりたくて、調べてたら cpan の Linux::Inotify2 が良さそうだったので試してみました。
モジュールをインストール(cpanminusを使用)。イベントループに AnyEvent を使うといいらしいので、そちらも。
$ cpanm Linux::Inotify2
$ cpanm AnyEvent
指定ディレクトリにファイルを投入したら別ディレクトリに mv するスクリプトを作成。
#!/usr/bin/env perl
use strict;
use warnings;
use Linux::Inotify2;
use AnyEvent;
my $watch_dir = $ENV{HOME} . '/inotify/queue';
my $processed_dir = $ENV{HOME} . '/inotify/processed';
my $inotify = Linux::Inotify2->new or die $!;
$inotify->watch(
$watch_dir,
IN_CLOSE_WRITE | IN_MOVED_TO,
sub {
my $e = shift;
my $name = $e->fullname;
print "test!:${name}\n";
system( 'mv', $name, "${processed_dir}/" );
}
);
my $cv = AnyEvent->condvar;
my $inotify_w = AnyEvent->io(
fh => $inotify->fileno,
poll => 'r',
cb => sub { $inotify->poll }
);
$cv->recv;
起動して queue ディレクトリにファイルを置いたら processed ディレクトリに移動するのを確認できました。
Tags: CentOS, Linux::Inotify2