Comment faire pour que le script Perl a travaillé qu'en un seul exemplaire

La tâche

Parfois, vous devez écrire un script Perl qui s'exécute uniquement si ce script ne fonctionne pas maintenant. C'est-à-dire de garantir que à un moment donné ne fonctionne qu'une instance de ce script.

Par exemple, ce problème peut se produire si un script est exécuté par la couronne chaque minute, et parfois il peut fonctionner plus d'une minute.

Ici, nous parlons du cas où le script ne fonctionne que sur un serveur et vous devez vous assurer que l'exécution n'est pas plus d'un инстанса un script sur une machine.

Solution

Le moyen le plus simple de résoudre ce problème est d'utiliser la bibliothèque Perl Sys::RunAlone.

La bibliothèque ne va pas avec Perl, il faut la mettre en option.

Pour faire un script qui ne fonctionne que dans une seule instance, vous devez ajouter dans un script use Sys::RunAlone; et __END__.

Voici un exemple de script qui ne fonctionne que dans un seul exemplaire:

#!/usr/bin/perl

use Sys::RunAlone;

print "working\n";

sleep 10;

__END__

Si vous exécutez ce script, il affiche le texte working et 10 secondes sera suspendu et d'attendre, puis s'arrête.

Si ouvrir une autre console, et jusqu'à ce que ce script fonctionne tenter de la lancer une fois de plus, ce lancement génère une erreur, et pas de code à partir d'un script exécuté ne sera pas:

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

Le bloc __END__ dans le script est obligatoire. Bibliothèque Sys::RunAlone utilise cette l'unité pour prendre lok. Et si ce bloc n'est pas, et de la bibliothèque Sys::RunAloneest connecté, alors, le script ne fonctionnera pas sur l'écran un message d'erreur Add __END__ to end of script 'script.pl' to be able use the features of Sys::RunALone.

Autres articles