Pergunta

Quero garantir que apenas um processo de cada vez seja executado. Portanto, quero garantir que o JOBB não funcione, a menos que Joba não esteja em execução.

Seria ótimo se tivesse alguma capacidade de tentar novamente a trava, para que eu não precise codificar isso. Algo vagamente assim:

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

Qual é a melhor maneira de fazer isso em Perl? Espero que haja um bom módulo CPAN para isso.

Foi útil?

Solução

#!/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

Isso vai travar o DADOS Seção do próprio programa. Eu uso essa técnica e funciona muito bem.

Você pode expandi -lo para ativar tentativas com bastante facilidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top