讀我有一個CGI環境文件的時間戳的一個問題。和CGI Perl - 文件時間戳不正確
我的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,Web服務器: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";
}
你必須在有一些記錄 - 那麼你的日誌說會發生什麼? –
我很努力地理解你爲什麼要寫一個從cron調用的CGI程序。是什麼讓它成爲一個CGI程序?至於你真正的問題,你有沒有嘗試開啓'嚴格使用'和'使用警告'? –
在Perl中引入註釋#不與// ... – tadmc