¿Cómo hacer un script en Perl sólo funcionaba en la misma instancia

La tarea

A veces es necesario escribir un script en Perl que sólo se ejecuta si en este mismo script ahora no funciona. Es decir, garantizar que en un momento en el tiempo sólo funciona una instancia de este script.

Por ejemplo, este problema puede producirse si el script se ejecuta de la corona cada minuto y, a veces, se puede trabajar más de un minuto.

Aquí estamos hablando de un caso cuando el script funciona en un solo servidor y la necesidad de garantizar la la ejecución no es más que un инстанса script en la misma máquina.

La solución

La forma más sencilla de solucionar este problema es utilizar Perl biblioteca Sys::RunAlone.

La biblioteca no va con Perl, es necesario poner avanzadas.

Para hacer que el script, que sólo funciona en la misma instancia, se debe agregar en el script use Sys::RunAlone; y __END__.

He aquí un ejemplo de un script que sólo funciona en una instancia de:

#!/usr/bin/perl

use Sys::RunAlone;

print "working\n";

sleep 10;

__END__

Si ejecuta este script, se mostrará en la pantalla el texto working y 10 segundos se cuelga y esperar, y luego se cerrará.

Si abrir otra consola y hasta que este script se ejecute intentar ejecutarlo una vez más, este inicio se generará un error, y no el código de un script que ya no será:

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

El bloque de __END__ en el script es obligatorio. La biblioteca Sys::RunAlone utiliza este la unidad para tomar el lok. Y si esta unidad no tiene, y la biblioteca Sys::RunAloneestá conectado, el script no funcionará, en la pantalla aparecerá el mensaje de error Add __END__ to end of script 'script.pl' to be able use the features of Sys::RunALone.

Otros articulos