Qual módulo CPAN usar para bloqueio de arquivos sem bloqueio com Perl
-
27-09-2019 - |
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.
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