У меня есть скрипт Perl, который разделяет файл журнала и отправляет запрос в базу данных, и я хочу выполнить этот скрипт Perl из файла bat в планировщике задач Windows. Это выполняет только первый запрос, и я хочу выполнить все запросы.
Мой logfile.txt:
Wed Oct 17 04:57:08 2018 : Resource = 'toto' cstep= 'fifi' time =23.634s
Wed Oct 17 04:57:50 2018 : Resource = 'titi' cstep= 'fofo' time =22.355s
Мой Perl скрипт
use DBI; use Sys::Hostname ();
$hostname = Sys::Hostname::hostname();
$hostname_cstep_table = $hostname . '_cstep_table';
# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=DB;host=IP", "nameDB", 'psswordDB', {'RaiseError' => 1});
#on peut utiliser insert mais il y aura des doublons et ici on est dans une table unique
my $sth = $dbh->prepare("SHOW TABLES LIKE '$hostname_cstep_table';")
or die "prepare statement failed: $dbh->errstr()";
$sth->execute() or die "execution failed: $dbh->errstr()";
#affiche 0 ou 1, selon la table qui est trouvé
$row = $sth->rows;
if ($row eq 1) {
print $hostname_cstep_table . " has created";
}
if ($row eq 0) {
#on peut utiliser insert mais il y aura des doublons et ici on est dans une table unique avec une clé primaire et un ID incrémenté
my $sth = $dbh->prepare(" CREATE TABLE `$hostname_cstep_table` ( `ID` TINYINT ( 3 ) UNSIGNED NOT NULL AUTO_INCREMENT , `time` datetime NOT NULL, `cstep` nvarchar(100)NOT NULL, `time_in_seconde` int NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY (`time`) ) ENGINE=Aria;")
or die "prepare statement failed: $dbh->errstr()";
$sth->execute() or die "execution failed: $dbh->errstr()";
open (FILE, 'logfile');
while (<FILE>) {
($word1, $word2, $word3, $word4, $word5, $word6, $word7, $word8, $word9, $word10, $word11, $word12, $word13, $word14) = split(" ");
$word13 =~ s/[^\d.]//g;
if ($word13 > 5) {
if ($word2 eq "Jan") {
$word2 = "01"
}
if ($word2 eq "Feb") {
$word2 = "02"
}
if ($word2 eq "Mar") {
$word2 = "03"
}
if ($word2 eq "Apr") {
$word2 = "04"
}
if ($word2 eq "May") {
$word2 = "05"
}
print "'$word5-$word2-$word3 $word4', $word11, $word13 \n";
# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=DB;host=IP", "nameDB", 'passwordDB',
{'RaiseError' => 1}) ;
#on peut utiliser insert mais il y aura des doublons et ici on est dans une table unique
my $sth = $dbh->prepare("REPLACE `$hostname_cstep_table` (time, cstep, time_in_seconde) VALUES('$word5-$word2-$word3 $word4', $word11, $word13);")
or die "prepare statement failed: $dbh->errstr()";
$sth->execute() or die "execution failed: $dbh->errstr()";
print $sth->rows . " rows found.\n";
$sth->finish;
}
}
}
Мой командный файл
C:\Users\Desktop\perl_32_bits\portableshell.bat
C:\Users\Desktop\perl_32_bits\test3.pl %*
Спасибо за ваш ответ.