首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按计划更改计划时间:

按计划更改计划时间:
EN

Stack Overflow用户
提问于 2011-01-27 19:15:58
回答 1查看 1.4K关注 0票数 3

我正在用Perl编写一个脚本,它需要每晚同时运行,但有时时间需要改变。我在CPAN上找到了时间表:Cron,它可以做我想做的事情。根据run方法的文档,

nofork => 1 启动调度程序时不要分叉。相反,作业是在当前进程中执行的。在执行的作业中,您可以完全访问脚本的全局变量,因此可能会影响在不同时间运行的其他作业。

这是我想做的,但它不是在做。每当我检查全局变量内存位置时,它们都是相同的,但在任务启动时值不会更改。

我在Windows和Linux上都运行了这个程序,我让其他人查看了代码,看看我的逻辑是否正确。我需要做些什么来保持全局变量的变化。

代码语言:javascript
复制
use warnings;
use strict;

use Schedule::Cron;
use Time::localtime;

use constant {
    EVERY_DAY_10PM => '* * * * * 4,16,28,40,52',
    EVERY_DAY_NOON => '* * * * * 0,12,24,36,48',
    EVERY_DAY_2AM => '* * * * * 7,19,31,43,55'
};

############GLOBAL VARIABLES############
our $cron = new Schedule::Cron(\&runUpdate);
our $cronId;
our $updateTimeDirty = 0;
############END GLOBAL VARIABLES############

############MAIN PROGRAM BODY############
$cronId = $cron->add_entry(EVERY_DAY_10PM);#defaults to \&runUpdate
$cron->add_entry(EVERY_DAY_NOON, \&changeTime);
$cron->run(no_fork => 1);
############END MAIN PROGRAM BODY############

sub changeTime {
    our $cron;
    our $cronId;
    our $updateTimeDirty;

    print "updateTimeDirty is $updateTimeDirty\n";
    print "udpateTimeDirty location: " . \$updateTimeDirty . "\n";
    print "cron object: " . \$cron . "\n";

    if ($updateTimeDirty) {
        my $cronEntry = $cron->get_entry($cronId);
        $cronEntry->{time} = EVERY_DAY_2AM;
        $cron->update_entry($cronId, $cronEntry);
    }
    print "\n";
}

sub runUpdate {
    our $updateTimeDirty;

    $updateTimeDirty = 1;
    print "Updating at " . localtime()->sec . " ($updateTimeDirty)\n\n";
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-27 19:28:38

no_forknofork有显着性差异。尝试:

代码语言:javascript
复制
$cron->run(nofork => 1);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4820733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档