我要确保只有一个进程时运行。所以我想确保JOBB不运行,除非职吧没有运行。

这会,如果它有重试锁,所以我没有代码,有些能力是巨大的。东西依稀这样的:

LockFileModule->lock(
    lockfile           => '/fabulous/pants',
    retries            => 12,
    timeout            => 25,
    timebetweenretries => 30,
) or die "the other job is still running";

什么在Perl中做到这一点的最好方法是什么?我希望有一个很好的CPAN模块这一点。

有帮助吗?

解决方案

#!/usr/bin/perl
unless (flock(DATA, LOCK_EX|LOCK_NB)) {
    $logger->info("$0 is already running. Exiting.\n" );
    exit(1);
} else {
    $logger->info("$0 not already running, so starting instance now." );
}

__DATA__
Do not delete this. Used for flock code above

此将锁定在 DATA 程序本身的部分。我使用这种技术,它工作得很好。

您可以展开它很容易使重试。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top