Hvordan til at gøre Perl-script virker kun i ét eksemplar

Opgave

Det er nogle gange nødvendigt at skrive et Perl-script, der kører kun hvis det samme script er ikke i orden. I. e., for at sikre, at på et tidspunkt kun én instans af dette script.

For eksempel, dette problem kan opstå, hvis scriptet er kørt til kronen hvert minut, og nogle gange kan det køre mere end et minut.

Her taler vi om den sag, når scriptet virker på én server, og du ønsker at sikre, udførelse ikke er mere end én forekomst af scriptet på den samme maskine.

Afgørelsen

Den nemmeste måde at løse dette problem er at bruge Perl-bibliotek Sys::RunAlone.

Biblioteket kommer med Perl, det er nødvendigt at installere yderligere.

At lave et script der kun virker i én instans, er du nødt til at tilføje i de eksisterende script use Sys::RunAlone; og __END__.

Her er et eksempel på et script der kun virker i et eksempel:

#!/usr/bin/perl

use Sys::RunAlone;

print "working\n";

sleep 10;

__END__

Hvis du kører dette script, det viser teksten working og 10 sekunder til at hænge og vente, og så afslutter.

Hvis du åbner en anden konsol, og mens scriptet kører, for at prøve at køre det en gang mere dette løb vil mislykkes, og ingen kode fra scriptet ikke vil blive udført:

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

Enhed __END__ i scriptet, er obligatorisk. Bibliotek Sys::RunAlone bruger denne enheden for at tage Locke. Og hvis denne blok er ikke mere, og biblioteket Sys::RunAloneer tilsluttet vil scriptet ikke virke, vil skærmen vise fejl Add __END__ to end of script 'script.pl' to be able use the features of Sys::RunALone.

Andre artikler