Выход из цикла по истечении заданного времени

Рейтинг: 1Ответов: 1Опубликовано: 01.05.2015

Есть пополняемый файл, каждый день создается новый файл, в котором появляются записи. В файл за прошедший день, запись прекращается. Требуется его считать и распарсить, и записать в базу.

#! /usr/bin/perl
use File::Tail;
use DBI;
use Getopt::Long;
use POSIX qw(strftime);

$dbh = DBI->connect('DBI:mysql:phone', 'пользователь', 'пароль') or die "Could not connect to database: $DBI::errstr";
$date_string = strftime "%d_%m_%Y", localtime;
    $filename = "/srv/cdr/cdr_log_26_04_2015.log";
unless (-e $filename){
    my $lfh;
    open($lfh, '>', $filename) or
    die "Unable to open file $filename : $!";
    close($lfh) or die "Unable to close file : $filename $!";
}

$file=File::Tail->new(name=>$filename);
my $time = time;
while ((defined($line=$file->read))||($time<=time+25*60*60)) {
        my @arr = split(" ", $line);
    #$arr[0] - Port Address A
    #$arr[1] - anumber
    #$arr[2] - bnumber
    #$arr[3] - Port Address B
    #$arr[4] - anumber fixed
    #$arr[5] - bnumber fixed
    #$arr[6] - date
    #$arr[7] - time
    #$arr[9] - duration
    #$arr[10] - code
    if (($arr[4] eq "-") && ($arr[5] eq "-")){
        $arr[4] = $arr[1];
        $arr[5] = $arr[2];
    }
    $query = "INSERT INTO `phone` (`port_address_A`, `anumber`, `port_address_B`, `bnumber`, `duration`, `date`, `time`, `code`) VALUES('$arr[0]', '$arr[4]', '$arr[3]', '$arr[5]', '$arr[9]', STR_TO_DATE('$arr[6]', '%d-%m-%y'), STR_TO_DATE('$arr[7]', '%T'), '$arr[10]');\n";
    $dbh->do($query);
    undef @arr;
}
$dbh -> disconnect;

Не могу понять, почему скрипт весит в процессах больше суток. Ведь по условию он должен выйти из цикла через 25 часов. Вообще, в идеале, как-то его завершить, если в файле не появляются строчки на протяжении 6 часов, например.

Ответы

▲ 2

Посмотрите на условие $time <= time + 25*60*60 еще раз. Попробуйте подставить сюда реальные значения. Вот, к примеру, $time - это 1 апреля. Допустим, сейчас уже третье апреля. Что получится в условии?