Schrift
[thread]8667[/thread]

Log-Files mit Viren löschen ...



<< >> 2 Einträge, 1 Seite
Gast Gast
 2007-01-22 11:44
#73483 #73483
Hallo, ich habe auf einem System ein Perl-Script am Laufen, was jeweils einen Monat später die Logfiles mit Viren löscht.
Die Files mit den Viren sollen genau einen Monat lang noch vorhanden sein, bevor sie gelöscht werden.
Das lief bisher einwandfrei.
Nur jetzt im Januar wurden die Dezember-Files nicht gelöscht, sondern die tagesaktuellen, was natuerlich schlecht ist.
Anbei habe ich das Script mal drangehängt, vielleicht findet jemand den Fehler ...

Code: (dl )
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
#!/usr/bin/perl
use POSIX;

$archdiff = 30;
$archpath = "/var/spool/amavis/virusmails";
$logdatei = "/var/log/delamach.log";
$delete = "FALSE";
$count = 0;

$doy = strftime "%j", localtime;
$t = strftime "%Y.%m.%d. %H:%M:%S", localtime;

open (LOG, ">>$logdatei") ||
       die ("Error: Datei delamach.log kann nicht geoeffnet werden.");

opendir(DIR, $archpath);

while($datei = readdir(DIR)) {
       ($check, $dummy) = split (/-/, $datei);
       if ($check eq "virus") {
               ($dummy, $temp) = split (/virus-/, $datei);
               ($datum, $temp) = split (/-/, $temp);
               $jj = substr($datum, 0, 4);
               $mm = substr($datum, 4, 2);
               $dd = substr($datum, 6, 2);
               $testdoy = strftime "%j", "0", "0", "0", $dd, $mm-1, $jj-1900;
               if ($doy < $archdiff+1) { $doy = $doy+(366-$archdiff); }
               if ($testdoy < $doy-$archdiff) {
                       $count++;
                       if ($delete eq "FALSE") { $delete = "TRUE"; }
                       unlink("$archpath/$datei");
                       print LOG "$t --> $datei geloescht.\n";
                       print "$datei wurde geloescht.\n";
               }
       }
}
closedir(DIR);
if ($delete eq "FALSE") { print LOG "$t --> Keine Dateien zu loeschen.\n"; }
else { print LOG "$t --> $count Dateien wurden geloescht.\n"; }
close (LOG);


//Modedit GwendragonCode in Code-Tags gestellt\n\n

<!--EDIT|GwenDragon|1169461425-->
pq
 2007-01-22 14:37
#73484 #73484
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Guest,22.01.2007, 10:44]
Code: (dl )
1
2
                if ($doy < $archdiff+1) { $doy = $doy+(366-$archdiff); }
               if ($testdoy < $doy-$archdiff) {
[/quote]
wenn $doy kleiner gleich 30, addierst du 336 drauf. warum das?
ausserdem solltest du unbedingt Wiki:use strict; benutzen.
und für datumsberechnungen gibt es z.b. CPAN:Date::Calc
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 2 Einträge, 1 Seite



View all threads created 2007-01-22 11:44.