PDA

View Full Version : Esecuzione contemporanea di 2 script perl


Maui78
12-05-2014, 21:40
Ciao a tutti
Mi sto cimentando nella creazione di uno, a mio modo, stupidissimo, script in perl (su windows 2008), che, nelle mie intenzioni, dovrebbe eseguire un batch sul server, ma ho più di qualche difficoltà.
Ho effettuato 2 tentativi, allego solo il primo, ma, in entrambi i casi, richiamando lo script da apache, non riesco ad impedire la possibilità di eseguirlo più volte contemporaneamente.
In realtà, aprendo più schede, finchè ce n'è uno in funzione l'altro non parte, ma vorrei mi stampasse una riga per avvisare che è già in esecuzione altrove, e che si fermasse lì. Invece, ignora la print e attende la fine del primo.
Sotto il primo esempio dove uso un file semaforo per bloccare una seconda partenza:

#!C:/Perl64/bin/perl.exe

use strict;
use warnings;

print "Content-type: text/html\n\n";

my $BASE_PATH= "miopath";
my $filename = "$BASE_PATH/test.txt";

if (!-e $filename)
{
open MYFILE, ">", "$filename";
print "eseguo il caricamento<br>";
system("\"mio.bat\" > NUL");
print "caricamento terminato<br>";
close (MYFILE);
unlink ("$filename");
}
else
{
print "Caricamento gia in corso. Attendere la conclusione";
}


Tra l'altro, vorrei mi stampasse la prima print e poi partisse l'esecuzione dello script, invece mi stampa le 2 righe contemporaneamente a caricamento terminato, vanificando di fatto il senso di ciò che ho scritto.

Mi illuminate ?

PS: l'altro tentativo, che non ho qui sotto mano, l'ho fatto sfruttando l'flock, ma ha incontrato gli stessi identici problemi. Lo script attende il termine dell'altro prima di partire invece di uscire stampando l'eccezione.

british
14-05-2014, 01:35
Per la questione che stampa tutto in un colpo solo potrebbe essere un problema del browser. Prova a connetterti allo script con telnet o netcat.

Per il fatto che non esegue le due istanze in contemporanea per ora non ti so dire.

Maui78
14-05-2014, 07:54
Ciao, ieri ho fatto qualche altra prova. Effettivamente la stampa di entrambe le righe avviene solo sul browser. Viceversa, da una shell il tutto avviene in sequenza senza problemi. Adesso provo a raffinare un pò il tutto e vediamo se risolvo.
Per quanto riguarda l'altro problema, in realtà a me serve bloccare la possibilità di eseguire contemporaneamente da due sessioni diverse lo script, e, verificando meglio, effettivamente è così. Se lancio il perl da un browser blocco la possibilità di eseguirlo da altri, esattamente come speravo. Il problema si manifesta solo quando apro più schede sullo stesso browser, è lì che mi ero convinto che il giro non funzionasse, ma, sembra essere tutto ok.

Grazie lo stesso ! :)