是否有用Perl编写的类似cron的服务?

时间:2008-11-24 09:31:50

标签: perl cron

我正在考虑Perl中的一个Web应用程序,它允许用户创建bug监视器。所以基本上每个“bug watch”都将是一个bug ID,它将与“sleep”时间一起传递给子例程,一旦“sleep sleep”结束,它就必须重复而不会阻塞父进程或对等进程

  • 我试过了Schedule::Cron。它支持类似cron的格式,但是这里subs的参数必须是简单的标量,因此我将其排除。

  • POE / Coro似乎是另一种选择,但我对它没有太多了解/:(

任何见解? TIA

-Matt。

4 个答案:

答案 0 :(得分:6)

Schedule :: Cron有什么问题?您可以创建任何您喜欢的子例程引用,这样您就可以创建引用所需的额外或特定数据的闭包。您不必依赖参数列表。该模块还有其他一些不适合你的东西吗?

答案 1 :(得分:4)

  

我试过Schedule :: Cron。它支持类似cron的格式,但是这里subs的参数必须是简单的标量,因此我将其排除。

Schedule :: Cron文档说参数对包含在调用子例程时使用的参数的数组的引用。如果您愿意,可以将引用传递给参数的命名数组。由于cron条目包含对@data的引用,因此您可以根据需要在代码中添加或删除@data元素。

$cron->add_entry(
    '* * * * *',
    subroutine => \&mysub,
    arguments => \@data,
);

你也可以使用一个闭包,正如Brian建议的那样:

my $var = 42;
my @arr = get_stuff();

$cron->add_entry(
    '* * * * *',
    sub { mysub($var, @arr) },
);

有关闭包的更多信息,请参见perlref手册页。

答案 2 :(得分:1)

如果您决定调查Coro,则可能值得查看Continuity,因为这是围绕Coro构建的Web库/框架。

另请参阅Squatting网络微框架,其中“深蹲”在Continuity by default之上。 Squatting发行版附带了一些使用Coro::Event的例子。

答案 3 :(得分:0)

@(brian d foy):我认为Schedule :: Cron对我有好处的原因 1:$ cron-> add_entry似乎没有为我提供将@ arrays / $ vars传递给sub的选项。

$ cron-> add_entry(“$ temp”,{'subroutine'=> \& test1,'arguments'=> \ @array});是不允许的。

2:我不确定在cron-> run之后是否有办法添加新的cron条目(detach => 1);已经被解雇而没有重新启动脚本..