1

Web ページを毎分更新する Perl スクリプトがあります。ここで、1 時間に 1 回の MySQL クエリをいくつか追加したいと思います。JavaScript のように Perl にスケジュール エグゼキュータはありますか、それとも Perl に JavaScript を組み込むことはできますか?

4

2 に答える 2

2

この解決策はPerlにあります。

localtime()関数は perl で使用できます。1 時間の差を計算し、MySQL クエリを実行します。

理解するには、このリンクにlocaltime()アクセスしてください。

また

CPAN を使用できますTime::HiRes

Time::HiRes についてはこちらをお読みください。

また

次のコードに従います。

use Time::Elapse;

## somewhere in your code...
Time::Elapse->lapse(my $now);

#...rest of code execution    
print "Time Elapsed: $now\n";
于 2013-03-07T07:57:45.880 に答える
0

私はこのようなものを提案します。次の更新に繰り越されるタイムスタンプを含めます(メタタグが発生するように調整します)。SQLを正確に1時間で実行する必要がある場合、いくつかの問題が発生しますが、それは単なるメンテナンスだと思います。タイムスタンプは、SQLが実行されている場合にのみ更新され、SQLは、現在の時刻が前のタイムスタンプから1時間以上経過している場合にのみ実行されます。

以下は、現在の時刻を使用する代わりに、タイムスタンプを3600秒に更新します。その後、1時間ごとに実行することに非常に近づいています。

一部のWeb開発者は、この方法でメタリフレッシュを使用することを好まないため、javascriptまたはcookieがオプションになる場合があります。(しかし、これがあなたのために働くなら、幸せになってください:-)

use strict;
use CGI;

#time() is number of seconds since long time ago
my $lastrun = CGI->param('lastrun') || time();

#if hour is important (ie not 58 or 61 minutes) then need to 
#consider the time spent running this script, etc
if (time() > $lastrun + 60 * 60) { #one hr is 60 sec * 60 min
    $lastrun += 60 * 60; #udate timestamp before starting sql
    #run sql
}

#do fixed stuff every minute

print qq|
    Pragma: no-cache
    Content-Type: text/html

    <html><head>
        <!-- remember to adust the url below ---vvvvvvvvvvvvvvvv-----here -- so time is ok vvvvv -->
        <meta http-equiv="refresh" content="60;URL='http://example.com/script.pl?lastrun=$lastrun">
    </head>
    <body>hello again, waiting...</body>    
    <html>
|;
于 2013-03-07T17:48:47.980 に答える