Schrift
[thread]8685[/thread]

Logfile schreibt alles ... soll es aber nicht ..



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
SimplyFred
 2007-01-26 08:27
#73612 #73612
User since
2006-12-16
25 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich bin absoluter Newbie in Perl und brauche Hilfe. Ich habe ein Script, was nach Dateien sucht, die älter als 31 Tage sind und die dann löscht. Ich habe dazu ein Logging eingebaut, allerdingt wird hier alles geloggt und nicht nur das was gelöscht wird. Auch die Sachen, die nicht gelöscht wurden sind, stehen mit "geloescht.." im Log.
Ausserdem sollte eigentlich nicht nach einer Datei beginnend mit "virus..." gsucht werden, sondern innerhalb der Datei sollte nach "virus" geuscht werden, ähnlich einem grep.

Anbei der Code - wäre super, wenn mir jemand auf die Sprünge helfen könnte

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
opendir(DIR,'/var/spool/amavis/virusmails/test');  
my @files=readdir(DIR);
closedir(DIR);
foreach (sort @files) {
if ($_=~ /virus*/) {
$alter = (-M "/var/spool/amavis/virusmails/test/".$_);
# print "/var/spool/amavis/virusmails/test/".$_." = ".$alter."\n";
print LOG "$t $_ groesser als 31 Tage --> $alter geloescht.\n";
# print "$_ wurde geloescht.\n";
$count++;
if ($alter > 31) {
system("rm /var/spool/amavis/virusmails/test/".$_);
# print "del\n";
}
}
}
print LOG "$t --> $count Dateien wurden geloescht.\n";
close (LOG);
\n\n

<!--EDIT|renee|1169793051-->
renee
 2007-01-26 08:51
#73613 #73613
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das $count++ muss in den if-Block mit der "altersüberprüfung":
statt
Code: (dl )
1
2
3
4
5
$count++;
if ($alter > 31) {
system("rm /var/spool/amavis/virusmails/test/".$_);
# print "del\n";
}


das hier
Code: (dl )
1
2
3
4
5
        if ($alter > 31) {      
system("rm /var/spool/amavis/virusmails/test/".$_);
$count++;
# print "del\n";
}


Du solltest auch Perl-Funktionen verwenden wo es geh. Also aus:
Code: (dl )
            system("rm /var/spool/amavis/virusmails/test/".$_);     


ein
Code: (dl )
            unlink '/var/spool/amavis/virusmails/test/'.$_;     
(siehe <!--pod_f1--><a href="//perldoc.perl.org/functions/unlink.html" target="_blank"><img alt="perldoc " src="/iB_html/non-cgi/Skin/SKIN-3/images/perldoc.gif" border="0"> <!--pod_f2-->-f unlink<!--pod_f3--></a><!--pod_f4-->)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
SimplyFred
 2007-01-26 09:49
#73614 #73614
User since
2006-12-16
25 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe es soweit geändert, der Zähler läuft nun richtig, allerdings ist die Ausgabe nun wie im geposteten Code

Wie kann ich es machen, dass nur die, die wirklich > 31 Tage ins Log geschrieben werden ?


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2007.01.26. 08:42:26 virus-20051017-102909-29749-03.SAVE groesser als 31 Tage --> 466.070347222222 geloescht.
2007.01.26. 08:42:26 virus-20051217-102909-29749-03.SAVE groesser als 31 Tage --> 405.028680555556 geloescht.
2007.01.26. 08:42:26 virus-20061214-102909-29749-03.SAVE groesser als 31 Tage --> 41.0286805555556 geloescht.
2007.01.26. 08:42:26 virus-20061215-102909-29749-03.SAVE groesser als 31 Tage --> 41.0286805555556 geloescht.
2007.01.26. 08:42:26 virus-20061216-102909-29749-03.SAVE groesser als 31 Tage --> 41.0286805555556 geloescht.
2007.01.26. 08:42:26 virus-20061217-102909-29749-03.SAVE groesser als 31 Tage --> 40.0286805555556 geloescht.
2007.01.26. 08:42:26 virus-20061218-102909-29749-03.SAVE groesser als 31 Tage --> 41.0286805555556 geloescht.
2007.01.26. 08:42:26 virus-20070124T050224-02906-10 groesser als 31 Tage --> 2.15269675925926 geloescht.
2007.01.26. 08:42:26 virus-20070124T090948-12353-02 groesser als 31 Tage --> 1.98090277777778 geloescht.
2007.01.26. 08:42:26 virus-20070124T205417-05606-02 groesser als 31 Tage --> 1.49167824074074 geloescht.
2007.01.26. 08:42:26 virus-20070124T210404-05721-05 groesser als 31 Tage --> 1.48487268518519 geloescht.
2007.01.26. 08:42:26 virus-20070124T210536-05905-03 groesser als 31 Tage --> 1.48381944444444 geloescht.
2007.01.26. 08:42:26 virus-20070124T210748-05881-05 groesser als 31 Tage --> 1.48229166666667 geloescht.
2007.01.26. 08:42:26 --> 7 Dateien wurden geloescht.
\n\n

<!--EDIT|renee|1169800305-->
topeg
 2007-01-26 10:22
#73615 #73615
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code (perl): (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
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
#!/usr/bin/perl

# Bitte immer diese Moduke verwenden
use strict;
use warnings;

# Das Arbeitsverzeichnis in einer Variable plazieren,
# ansonsten ist es unnötig kompliziert das zu ändern.
my $workdir='/var/spool/amavis/virusmails/test';
my $logfile='/var/log/script/log.0';
my $sollalter=31;
my $count=0;
# reine Ahnung was das machen soll....
my $t='???';

# mach eine Fehlermeldung,
# wenn du versuchst das Verzeichnis zu öffnen.
opendir(DIR,$workdir) or die "Konnte '$workdir' nicht öffnen! ($!)\n";
my @files=readdir(DIR);
closedir(DIR);

# Im Array @files steht auch "." und ".." drin.
# es ist günstig das zu entfernen.
@files=grep{$_!~/^(?:.|..)$/}@files;

open(LOG, '>', $logfile) or die "Konnte '$logfile' nicht öffnen ($!)\n";

# ich halte es für "unschön" und unübersichtlich,
# wenn man ständig "$_" verwendet.
# Ist aber Ansichtssache.
foreach my $file (sort @files) { 
    # Du must "$workdir/$file" schreiben,
    # da "$workdir" kein abschließenden "/" hat.
    my $alter = (-M "$workdir/$file");
    # Es macht nur sinn alle weiteren Prüfungen zu machen,
    # wenn die Datei wirklich älter als 31 Tage ist.
    if ($alter > $sollalter) {
        # Jetzt die Datei öffnen und nach virus suchen.
        my $hat_virus=0;
        open(DATEI, '<', "$workdir/$file") or
          warn "konnte Datei '$workdir/$file' nicht öffnen ($!)\n";
        while(<DATEI>) {
            if($_=~m/virus/i) {
              $hat_virus=1;
              last();
            }
        }
        close(DATEI);
        if ($hat_virus) {
            $count++;
#            print "$workdir/$file = $alter\n";    
            print LOG "$t: $workdir/$file älter als 31 Tage ($alter). -> gelöscht\n";
            # es ist günstiger Perleigene Befehle zu nutzen.
            # zum einen ist er schneller,
            # zum anderen ist es eifacher eine Fehlermeldung zu machen.
            #
            # Hier könnte man auch if(unlink(...)) machen
            # und das erfolgreiche Löschen ins LOG schreiben
            unlink("$workdir/$file") or
              warn "konnte '$workdir/$file' nicht löschen ($!)\n";
#            print "$workdir/$file wurde geloescht.\n";
        }  
    }
}
print LOG "$t  -->; $count Dateien wurden geloescht.\n";
close (LOG);
renee
 2007-01-26 10:32
#73616 #73616
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
genau, das print LOG ... hatte ich übersehen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
SimplyFred
 2007-01-26 12:45
#73617 #73617
User since
2006-12-16
25 Artikel
BenutzerIn
[default_avatar]
Wahnsinn - echt super - ich habe es angepasst - es läuft einwandfrei.
Ich habe den Code nochmal angehängt - so läuft es jetzt wie geschmiert.
Super vielen Dank an alle !!!!!

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
41
42
43
44
45
46
47
48
use strict;
use warnings;
use POSIX;
my $workdir='/var/spool/virusmails';
my $logfile='/var/log/del-old-virus.log';
my $sollalter=31;
my $count=0;
my $t = strftime "%d.%m.%Y - %H:%M:%S", localtime;
opendir(DIR,$workdir) or die "Konnte '$workdir' nicht oeffnen! ($!)\n";

my @files=readdir(DIR);
closedir(DIR);

# Im Array @files steht auch "." und ".." drin.
# Punkte werden in der folgenden Zeile entfernt.

@files=grep{$_!~/^(?:.|..)$/}@files;

open(LOG, '>>', $logfile) or die "Konnte '$logfile' nicht oeffnen ($!)\n";

foreach my $file (sort @files) {
my $alter = (-M "$workdir/$file");

# Weitere Pruefungen werden nur gemacht wenn Datei wirklich > 31 Tage ist
if ($alter > $sollalter) {

# Jetzt die Datei oeffnen und nach virus suchen.
my $hat_virus=0;
open(DATEI, '<', "$workdir/$file") or
warn "konnte Datei '$workdir/$file' nicht oeffnen ($!)\n";
while(<DATEI>) {
# if($_ = ~/virus/ or $_ = ~/BAD/) { # hier wird nach den strings "virus" oder "BAD" gesucht #
if($_=~m/virus/i) { # hier wird nur nach dem string virus gesucht #
$hat_virus=1;
last();
}
}
close(DATEI);
if ($hat_virus) {
$count++;
print LOG "$t: $workdir/$file aelter als 31 Tage ($alter). -> geloescht\n";
unlink("$workdir/$file") or
warn "konnte '$workdir/$file' nicht loeschen ($!)\n";
}
}
}
print LOG "$t -->; $count Dateien wurden geloescht.\n";
close (LOG);
\n\n

<!--EDIT|SimplyFred|1169808524-->
renee
 2007-01-26 12:56
#73618 #73618
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
$_!~/^(?:.|..)$/ -> eleganter: $_!~/^\.\.?$/
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
topeg
 2007-01-26 13:01
#73619 #73619
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
[quote=renee,26.01.2007, 11:56]$_!~/^(?:.|..)$/ -> eleganter: $_!~/^\.\.?$/[/quote]
Und das mir! ;)
renee
 2007-01-26 13:10
#73620 #73620
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Noch eleganter ist sogar !/^\.\.?$/, da das automatisch für $_ gemacht wird...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
SimplyFred
 2007-01-26 13:13
#73621 #73621
User since
2006-12-16
25 Artikel
BenutzerIn
[default_avatar]
Unglaublich ..
ich seh schon - hier kann ich viel lernen

Perl bietet ja wirklich enendliche Möglichkeiten, einfach geil !
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2007-01-26 08:27.