cgi perl - 文件时间戳无法正确读取

时间:2011-12-08 08:45:21

标签: perl file cgi timestamp

我在CGI环境中遇到文件时间戳问题。

我的cgi脚本每分钟被cron调用一次。

此cgi脚本通过来自外部源的http获取一些文本数据(消息)并将其写入文件。 在此之前,它会检查此文件的最后修改时间戳,并读取文件的旧内容。 我正在用

读取文件时间戳
$fileage = (-M $filename) * 24 * 60;

如果文件时间戳超过5分钟且新邮件与旧邮件不同,则会将邮件发送到其他来源。

请参阅下面的代码片段。

我现在的问题:脚本每分钟运行一次,持续30到50分钟,然后突然文件时代开始不能正确读取,就像文件被缓存一样。 读取文件的年龄增加到10分钟,15分钟,20分钟等,而不是返回应该总是大约5到7分钟的正确文件年龄,尽管文件每隔几分钟就会不断写入。

System是Linux 2.6.16.60-0.42.10-bigsmp,Perl版本:5.008008,Webserver: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 :(得分:0)

我在这里看到拼写错误: $fileage = (-M $tfilename) * 24 * 60; // have the file age in minutes。没有像$tfilename ...

这样的变量