Come fare per uno script in Perl lavorato solo in un unico esemplare

Compito

A volte è necessario scrivere uno script in Perl che si avvia solo se questo stesso script non funziona. Cioè garantire che in un momento funziona solo una istanza di questo script.

Ad esempio, questo problema può verificarsi se lo script viene eseguito per la corona ogni minuto e a volte si può lavorare per più di un minuto.

Qui stiamo parlando di un caso in cui lo script funziona solo su un server e la necessità di garantire l'esecuzione non più di una istanza di uno script su una macchina.

La decisione

Il modo più semplice per risolvere questo problema è quello di utilizzare Perl libreria Sys::RunAlone.

La biblioteca non va di pari passo con il Perl, il suo bisogno di mettere ulteriormente.

Per fare uno script che funziona solo in un caso, è necessario aggiungere esistente script use Sys::RunAlone; e __END__.

Ecco un esempio di script che funziona solo in un unico esemplare:

#!/usr/bin/perl

use Sys::RunAlone;

print "working\n";

sleep 10;

__END__

Se eseguire questo script, poi si visualizzerà il testo working e 10 secondi si bloccherà e aspettare, e poi completare il lavoro.

Se per aprire un'altra console e fino a quando questo script funziona provare a eseguire ancora una volta, questo lancio genera un errore, e nessun codice di script non viene eseguita:

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

Unità __END__ in uno script è un must. La libreria Sys::RunAlone utilizza questo blocco per prendere loc. E se questa unità non c'è, e la libreria Sys::RunAlonecollegato, lo script non funzionerà, verrà visualizzato l'errore Add __END__ to end of script 'script.pl' to be able use the features of Sys::RunALone.

Altri articoli