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.
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.