1

我想确保一次只运行一个进程。所以我想确保 jobB 不会运行,除非 jobA 没有运行。

如果它具有重试锁定的能力,那就太好了,这样我就不必编写代码了。有点像这样:

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

在 Perl 中执行此操作的最佳方法是什么?我希望有一个很好的 CPAN 模块。

4

1 回答 1

2
#!/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部分。我使用这种技术,效果很好。

您可以扩展它以非常轻松地启用重试。

于 2010-11-24T04:54:42.877 回答