Como fazer para um script Perl que trabalhou apenas em uma única instância

Tarefa

Às vezes é necessário escrever um script Perl que só é executado se o script não funciona. Т. е. garantir que em um ponto do tempo é apenas uma инстанс do script.

Por exemplo, esse problema pode ocorrer se o script for executado pela coroa a cada minuto, e às vezes ele pode trabalhar mais de um minuto.

Aqui nós falamos sobre o caso quando o script só funciona em um único servidor, e você precisa garantir a execução não é mais do que um инстанса script em uma máquina.

Solução

A maneira mais fácil de resolver este problema é o uso de Perl para a biblioteca Sys::RunAlone.

A biblioteca não vai junto com o Perl, deve-se colocar o avançado.

Para fazer um script que funciona apenas em uma instância, você precisa adicionar em um script existente use Sys::RunAlone; e __END__.

Aqui está um exemplo de script que funciona apenas em uma única instância:

#!/usr/bin/perl

use Sys::RunAlone;

print "working\n";

sleep 10;

__END__

Se você executar esse script, ele irá imprimir na tela o texto working e 10 segundos irá travar e esperar, e depois termina.

Se você abrir o console diferente e até que esse script funciona tente executá-lo mais uma vez, este lançamento irá gerar um erro, e nenhum código de script não será executado:

$ perl script.pl
A copy of 'script.pl' is already running

Bloco __END__ em um script é uma obrigação. A biblioteca Sys::RunAlone usa este a unidade para tomar lok. E se este bloco não, e a biblioteca Sys::RunAloneestá ligado o script não irá funcionar, aparece a tela de erro Add __END__ to end of script 'script.pl' to be able use the features of Sys::RunALone.

Outros artigos