【发布时间】:2017-08-05 21:49:10
【问题描述】:
我正在尝试使用 Perl Parallel:ForkManager 运行多个命令。我希望这些命令在不同的时间段运行。我正在使用一个子例程 is_time_elapsed 来检查是否该运行该命令。如果子例程返回 0,那么我正在使用并行 fork 管理器运行命令。命令正在执行,但我在屏幕上看到 STDOUT。相反,我想将 STDOUT 和 STDERR 重定向到文件中。如何防止 STDOUT 在屏幕中看到并重定向到文件
我的要求是在时间过去后在后台运行命令。我需要记录命令完成执行时的执行时间。这个脚本将是一个主脚本,它将无限运行并在时间过去时运行命令。除了 Parallel::ForkManager 之外,是否还有其他模块可以实现此目的。
my $forkMgr = Parallel::ForkManager->new(15);
$forkMgr->run_on_finish(
sub {
($pid, $exitCode, $ident) = @_;
print "Ended ==> $ident\n";
}
);
while (1) {
foreach my $cmd (@commands) {
if (is_time_elapsed($cmd)) {
$forkMgr->start($cmd)
and next;
exec("$cmd")
or die("exec: $!");
$forkMgr->finish;
}
}
sleep 30
}
【问题讨论】:
-
听起来你是在滚动自己的
crond。无论如何,您是否需要程序中的STDOUT?您可以永久覆盖它,也可以捕获它。 -
不完全一样,但类似于 cron :)。没有 STDOUT 我没问题,只需要 STDERR 以防执行的命令出现任何问题。
标签: perl parallel-processing fork