1

我有一个每分钟刷新网页的 Perl 脚本。现在我想添加一些应该每小时一次的 MySQL 查询。Perl 中是否有像 JavaScript 一样的调度执行器,或者我可以将 JavaScript 合并到 Perl 中吗?

4

2 回答 2

2

此解决方案与Perl一起使用。

您可以localtime()在 perl 中使用函数。计算一个小时的差异并拍摄 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。

以下将时间戳更新为 3600 秒,而不是使用当前时间。然后我们非常接近每小时运行一次。

一些 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 回答