cgi perl - метка времени файла не читается правильно - PullRequest
0 голосов
/ 08 декабря 2011

У меня проблема с временными метками файлов в среде CGI.

Мой cgi-скрипт вызывается cron раз в минуту.

Этот скрипт cgi извлекает некоторые текстовые данные (сообщения) через http из внешнего источника и записывает их в файл. Перед этим он проверяет отметку времени последнего изменения этого файла и считывает старое содержимое файла. Я читаю метку времени файла с

$fileage = (-M $filename) * 24 * 60;

Если временная метка файла старше 5 минут, а новое сообщение не идентично старому, оно отправляет его в другой источник.

См. Фрагменты кода ниже.

Моя проблема сейчас: Сценарий работает идеально раз в минуту в течение 30-50 минут, а затем внезапно возраст файла начинает читаться неправильно, как если бы файл был кэширован. Вместо того, чтобы возвращать правильный возраст файла, который всегда должен составлять около 5-7 минут, возраст чтения файла увеличивается до 10 минут, 15 минут, 20 минут и т. Д., Хотя файл записывается постоянно каждые несколько минут.

Система представляет собой Linux 2.6.16.60-0.42.10-bigsmp, версия Perl: 5.008008, веб-сервер: Apache 2

use CGI;
[...]
my $cgi = new CGI;

[...]

$fileagetolerance = 5;
$filename = "message.txt";

$newmessage = .... read via http from other website ...; # this message changes most of the time every few minutes.

$fileage = (-M $filename) * 24 * 60; # have the file age in minutes
print "file age of ".$filename.": ".$fileage.", minimum value needed for special action: ".$fileagetolerance."<br>\n";


if ( open( FILE, "<", $filename ) ) {
  $lastmessage = <FILE>; 
  close (FILE);   
} else {
  print "Couldn't read last message. Exiting<br>\n";
  die;
}

if ($newmessage eq $lastmessage) {
  print "Last message is identical with new message. Exiting...<br>\n";
  die;
}

if ($fileage < $fileagetolerance) {
  print "Last message was not long enough ago. Exiting...<br>\n";
  die;
}

sendItOut($newmessage);

if ( open( FILEOUT, ">", $filename ) ) {
  print FILEOUT $newmessage;
  close (FILEOUT);   
  print "Done.<br>\n";
} else {
  print "Couldn't write last message.<br>\n";
}

1 Ответ

0 голосов
/ 08 декабря 2011

Я вижу опечатку здесь: $fileage = (-M $tfilename) * 24 * 60; // have the file age in minutes.Нет такой переменной как $tfilename ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...