User since
2005-07-06
84
Artikel
BenutzerIn
Hallo,
folgendes Script läuft soweit nur checkt ernicht richtig ob aktuelle Dateien heisst das er checken soll ob aktuelle dateien vorhanden sind sprich tagesgültig und ein Tag zurück!
Kann mir einer helfen???
Script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#************************************************************************************
#* Backup-Kontrolle TestDirector
#************************************************************************************
# noch offen
# Logfilname soll Timestamp enthalten
# ***********************************************************************************
# ####################################################
# ****
# H A U P T S T E U E R U N G ****
# ****
# ####################################################
# ####################################################
# Erzeugen der Log-Datei mit Zeitstempel
######################################################
my $ausgabe_Datei = "log3.txt";
open LogDatei, ">>backupCheck.txt" || die "Kann Log Datei nicht anlegen : $!";
use time::localtime;
$tm = localtime;
print LogDatei " $tm \n\n\n";
# ####################################################
# parameter und funktion fuer das script einlesen
######################################################
$parameterFile = "input/Main.cfg";
open(IN, $parameterFile) || die "Paramterfile $parameterFile nicht gefunden!";
@par = <IN>;
close(IN);
eval( join("\n", @par) );
# ####################################################
#Ermittlung der aktuellen TestDirector-projekte
######################################################
#use cwd;
#use time::localtime;
#use strict;
#use strict;
#use warnings;
use Data::Dumper;
#wird erst später aus DOMS.mdb ermittelt, vorerst wird mit Hardcodierten Werten gearbeitet
$pjDomain[0] = "ZITA_PKM";
$pjName [0] = "Phoenix";
$pjDomain[1] = "ZITA_ATF";
$pjName [1] = "ZITA_522";
$pjDomain[2] = "ZITA_ATF";
$pjName [2] = "TLA";
$numberProjects = $#pjName;
for ($i = 0; $i <= $numberProjects; $i++){
$bkupDirectory = $backupPath . "\\" . $pjDomain[$i] . "_" . $pjName[$i] . "_db";
print LogDatei"Prüfe Existenz von " . $bkupDirectory . "\n";
if ( &existsFile($bkupDirectory) == 1 ) {
print LogDatei "Verzeichnis ist vorhanden!\n";
# nächste Prüfung: Inhalt innerhalb ...
# Prüfe mit der Subroutine 'existsActBackup', ob für das Verzeichnis eine Bkup-Datei existiert, die jünger als der Zeitraum.
# wenn 'ja' ist alles ok
# wenn 'nein', dann Eintrag in Log-Datei
$tmpValue = 0;
my $dir = $bkupDirectory;
opendir(DIR,$dir) or die "Kann das angegebene Verzeichnis nicht öffnen: $!\n";
my @verzeichnisse = grep{-f $dir.'/'.$_}readdir(DIR);
print LogDatei $_,"\n" for(@verzeichnisse);
#closedir DIR;
### Das ist die Routine die prüfen soll ob Dateien aktuell mit Datum heute oder 1 Tag zurück sind!
sub existsActBackup {
if (-C $_ <= @_[1])
{
$tmpValue = 1;
} else {
$tmpValue = 0;
}
$rValue = $tmpValue
}
print LogDatei $_,"\n" for(@verzeichnisse);
} else {
print LogDatei "Verzeichnis ist nicht vorhanden!\n";
# LOG: Fehlermeldung ausweisen.
}
}
# ####################################################
# ****
# S U B R O U T I N E N ****
# ****
# ####################################################
# existsFile
# ----------------------------------------------------
# Diese Routine prüft, ob eine übergebene Datei, auch
# ein Verzeichnis existiert.
# wenn 'ja', dann gibt die Routine die Zahl 1 zurück
# wenn 'nein', dann die Zahl 0
# ----------------------------------------------------
sub existsFile {
$tmpValue = 0;
if (-e @_[0]){
$tmpValue = 1;
} else {
$tmpValue = 0;
}
$rValue = $tmpValue
}
edit renee: ne Runde [code]-Tags spendiert...\n\n
<!--EDIT|renee|1126075942-->
User since
2003-08-04
14371
Artikel
ModeratorIn
Element eines Arrays spricht man mit
$array[index] und *nicht* mit
@array[index] an...
Die Sub könnte ungefähr so aussehen:
sub existsActBackup {
my ($file,$max_age) = @_;
my $tmpValue = 0;
my $age = (time - (stat($file))[10]) / (60 * 60 * 24);
if ($age < $max_age) {
$tmpValue = 1;
} else {
$tmpValue = 0;
}
return $tmpValue;
}
Die Subroutine wird dann ungefähr so benutzt:
if(existsActBackup('/path/to/fil.txt',hoechstAlterInTagen)){
print "Datei ist aktuell";
}
Du solltest auch unbedingt
use strict; benutzen...
User since
2005-01-13
782
Artikel
BenutzerIn
Übrigens könnten Satzzeichen in dem erklärenden Text auch helfen, dass wir verstehen, was dein problem ist. :)
User since
2005-07-06
84
Artikel
BenutzerIn
Hallo Renee,
vielen Dank erstmal!
Könntest Du mir bitte noch erklären worin hier der Unterschied ist zu meinem ich wollt mit -C die aktuellen Dateien herausfiltern. Ich find nun nicht die Variable die bei Dir dies bewirkt!
Leissi
User since
2003-08-04
14371
Artikel
ModeratorIn
Ich mache das mit
stat (siehe
perldoc -f stat), was Du mit
-C (vgl.
perldoc -f -X) machst. Gefällt mir einfach besser...
Der große Unterschied besteht aber in dem, was Du
-C bzw. ich
stat als Argument übergibst. Bei Dir ist
$_ sicherlich leer... Und was Du in
@_[1] (was sicherlich ein
$_[1][ sein sollte) hast, hast Du auch nirgends beschrieben!
User since
2005-07-06
84
Artikel
BenutzerIn
Hallo Vayu,
sorry ist mir in der Hektik nicht so aufgefallen!
Also nochmal :
In dem Script vergleiche ich zuerst ob die Dateiverzeichnisse vorhanden sind. Dannach gehe ich jedes Dateiverzeichnis durch und prüfe ob aktuell Backupdateien enthalten sind, diese dürfen nicht Älter als 1 Tag zurück sein . Wenn ja dann ist alles ok. Wenn Nein dann ist die Kontrolle Fehlerhaft.
Und mein Problem ist das ich kein OK oder Falsch Ergebnis bekommen.
Hoffe es ist jetzt verständlicher!
Gruss
Leissi
User since
2003-08-04
14371
Artikel
ModeratorIn
sub existsActBackup {
if (-C $_ <= @_[1])
{
$tmpValue = 1;
} else {
$tmpValue = 0;
}
$rValue = $tmpValue
}
Hier ist
$_ leer, also kann auch
-C $_ kein Ergebnis liefern. Und was soll
@_[1] sein?
Du hast nirgends gezeigt, wie Du die Methode aufgerufen hast...
User since
2005-07-06
84
Artikel
BenutzerIn
Hallo Rene,
mmmh hast Recht ist mir garnicht aufgefallen ich muss ja vorher die Methode aufrufen! wie vorher bei dem Verzeichnis !
Aber wo bau ich jetzt die Methode zum Aufruf ein!
Blöde Frage aber ich bin noch Anfänger in Perl!
Gruss
Leissi
User since
2003-08-04
14371
Artikel
ModeratorIn
Du baust den Methodenaufruf irgendwo in den Block von
if(existsBackup(...)){ ein (wo auch schon Dein Kommentar steht)...
ungefähr so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/perl
use strict;
use warnings;
use time::localtime;
use Data::Dumper;
my $ausgabe_Datei = "log3.txt";
open(LogDatei, ">>backupCheck.txt") or die "Kann Log Datei nicht anlegen : $!";
my $tm = localtime;
print LogDatei " $tm \n\n\n";
my $parameterFile = "input/Main.cfg";
open(IN, $parameterFile) || die "Paramterfile $parameterFile nicht gefunden!";
my @par = <IN>;
close(IN);
eval( join("\n", @par) );
#wird erst später aus DOMS.mdb ermittelt, vorerst wird mit Hardcodierten Werten gearbeitet
my (@pjDomain,@pjName);
$pjDomain[0] = "ZITA_PKM";
$pjName [0] = "Phoenix";
$pjDomain[1] = "ZITA_ATF";
$pjName [1] = "ZITA_522";
$pjDomain[2] = "ZITA_ATF";
$pjName [2] = "TLA";
my $numberProjects = $#pjName;
my $backupPath = '';
for (my $i = 0; $i <= $numberProjects; $i++){
my $bkupDirectory = $backupPath . "\\" . $pjDomain[$i] . "_" . $pjName[$i] . "_db";
print LogDatei"Prüfe Existenz von " . $bkupDirectory . "\n";
if ( -e $bkupDirectory ) {
print LogDatei "Verzeichnis ist vorhanden!\n";
opendir(DIR,$bkupDirectory) or die "Kann $bkupDirectory nicht öffnen: $!\n";
my @verzeichnisse = grep{-f $bkupDirectory.'/'.$_}readdir(DIR);
my $bool = 0;
for my $file(@verzeichnisse){
$bool = 1 if(existsActBackup($file,1));
}
print LogDatei "Backup vorhanden\n" if($bool);
print LogDatei $_,"\n" for(@verzeichnisse);
closedir DIR;
} else {
print LogDatei "Verzeichnis ist nicht vorhanden!\n";
# LOG: Fehlermeldung ausweisen.
}
}
sub existsActBackup {
my ($file,$max_age) = @_;
my $tmpValue = 0;
my $age = (time - (stat($file))[10]) / (60 * 60 * 24);
if ($age < $max_age) {
$tmpValue = 1;
} else {
$tmpValue = 0;
}
return $tmpValue;
}
ungetestet!
User since
2005-07-06
84
Artikel
BenutzerIn
Sorry\n\n
<!--EDIT|leissi|1126163537-->