1

一度に1つのプロセスだけが実行されるようにしたい。したがって、jobAが実行されていない限り、jobBが実行されないようにします。

ロックを再試行する機能があれば素晴らしいので、それをコーディングする必要はありません。漠然とこのようなもの:

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 に答える