ファイルが更新されてたら何かするPerlスクリプト

ファイルが更新されたら何かするスクリプトを書きました。

(任意の)ロックファイルに、対象ファイルを前回処理したときの
対象ファイルのタイムスタンプを保存しておきます。
スクリプトをcronとかで回して、対象ファイルの更新時間が変わっていたら、
指定したスクリプトを走らせるという、単純なものです。

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use IO::File;

my $target_file = $ARGV[0];
my $lock_file = $ARGV[1];
my $process_file = '';	
unless ($ARGV[2]) {
   $lock_file = $ARGV[0].'lock';
   $process_file = $ARGV[1];
}
else{
   $process_file = $ARGV[2];
}

unless (-e $target_file) {
    die "[error : cl_auto_compile] There is not target file to auto process.";
}
my $pre_time = localtime( (stat($target_file))[9] );

# 処理する必要が無ければ止める
if (-e $lock_file) {
    my $io = IO::File->new($lock_file, 'r') or die $!;
    my $line = $io->getline;
    $io->close;
    if ($pre_time eq $line){
	 exit;
    }
}
# 処理を書いたファイルを実行する
{
    my $io = IO::File->new($lock_file, 'w');
    $io->print($pre_time);
    $io->close;
    eval{`$process_file`};
}
exit;

# 実行方法
# ./auto_process.pl 対象ファイルのパス 処理を書いたファイルのパス
# ./auto_process.pl 対象ファイルのパス 対象ファイルのロックファイルのパス 処理を書いたファイルのパス	


たぶん、こういうの他にあると思うんですが。。。


投稿者:としのり  日時:23:59:59 | コメント | トラックバック |
blog comments powered by Disqus