Schrift
[thread]11038[/thread]

Poard: Loeschscript gesucht



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Strat
 2007-12-16 14:03
#103928 #103928
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hallo Leute,

habe gerade auf dem Server wieder alte Backups geloescht, und anstelle von 9% sind auf der Festplatte jetzt wieder ueber 50% der Festplatte frei, und der Plattenplatz muesste wieder fuer die naechsten 2-4 Monate reichen.

Hat wer Lust, dafuer ein kleines Perl-Script zu schreiben, das via cronjob ausgefuehrt wird? Das ist eine nette Uebungsaufgabe, und ich gebe gerne einen Code-Review.

Verzeichnis der Backup-Dateien: /sc/backup/
Dateimuster: my( $web, $date ) = $file =~ /^(\w+)\_(\d+)\-\d+\.tar.gz$/; Dateien, die nicht dieses Format haben, sollen einfach ignoriert werden.
Datumsformat: YYYYmmdd

z.B.
Quote
etc_20071215-030500.tar.gz
sc___wiki_20071101-030500.tar.gz
sc___develop2_20070812-030501.tar.gz
sc___wiki_20071201-030500.tar.gz
sc___develop_20071001-030500.tar.gz
sc___wiki_20071211-030500.tar.gz
sc___develop_20071011-030500.tar.gz
sc___wiki_20071212-030500.tar.gz
sc___develop_20071021-030500.tar.gz
sc___wiki_20071213-030500.tar.gz
sc___develop_20071101-030500.tar.gz

Jeden Tag wird eine Backupdatei pro web erzeugt. Ich will jedoch nur die folgenden Dateien behalten:

x) Die Dateien $date =~ /^(\d\d\d\d\d\d[0,1,2]1$/ # 01. 11. 21. Tag

x) [s]zusaetzlich sollen die Backups der letzten paar Tage verfuegbar sein, z.B. wenn heute der 16.12.2007 ist, dann sollen auch die Dateien seit dem 11.12.2007 liegen bleiben). Wenn heute erst der 12.12.2007 waere, sollten alle ab dem 01.12.2007 liegen bleiben.[/s] Update: die Dateien der letzten 5 Tage sollen auch ueberleben

x) zusaetzlich koennten vielleicht auch alle Dateien vom 11. und 21. geloescht werden, die aelter als 6 Monate sind.

x) Die geloeschten Dateien sollten in /sc/deleteFiles.log mitprotokolliert werden. Update:, vielleicht im Format: "$loeschdatum-$zeit\t$datei\n" (fuer's Loeschdatum/Zeit wuerde ich POSIX -> strftime verwenden, z.B. POSIX::strftime( '%Y%m%d-%H%M%S', localtime) )

Wer hat Zeit und Lust?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
renee
 2007-12-16 14:44
#103929 #103929
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Strat+2007-12-16 13:03:53--

x) zusaetzlich sollen die Backups der letzten paar Tage verfuegbar sein, z.B. wenn heute der 16.12.2007 ist, dann sollen auch die Dateien seit dem 11.12.2007 liegen bleiben). Wenn heute erst der 12.12.2007 waere, sollten alle ab dem 01.12.2007 liegen bleiben.


Wo ist da die Logik?

Für mich wäre es logisch, wenn die letzten 5 oder 7 Tage erhalten bleiben sollen.

Sind Module wie Date::Calc erlaubt?
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/
pq
 2007-12-16 18:08
#103950 #103950
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
renee+2007-12-16 13:44:05--
Wo ist da die Logik?

Für mich wäre es logisch, wenn die letzten 5 oder 7 Tage erhalten bleiben sollen.

also ich könnte mir situationen vorstellen, in denen man auch mal ein älteres backup gebrauchen
kann. wichtig ist aber auch, dass die backups auch auf einem anderen server gespeichert werden.
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
renee
 2007-12-16 18:13
#103951 #103951
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
pq+2007-12-16 17:08:16--
renee+2007-12-16 13:44:05--
Wo ist da die Logik?

Für mich wäre es logisch, wenn die letzten 5 oder 7 Tage erhalten bleiben sollen.

also ich könnte mir situationen vorstellen, in denen man auch mal ein älteres backup gebrauchen
kann.


Das ist ja unstrittig. Jeweils die vom 1.,11. und 21. sollen ja erhalten bleiben. Mir erschließt sich aber nicht die Logik aus dem von mir zitierten Punkt nicht.

16.12. -> 11.12. => 5 Tage
12.12. -> 01.12. => 11 Tage
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/
Strat
 2007-12-17 09:35
#103966 #103966
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Stimmt, die letzten 5 tage reichen voellig (und halt die vom 1./11./21.). das ist auch einfacher zu berechnen (oben geaendert).

Gerne Date::Calc verwenden; das muesste sogar schon installiert sein, ich schaue heute abend nach.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
renee
 2007-12-17 09:46
#103968 #103968
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich kümmere mich darum...
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/
renee
 2007-12-17 09:51
#103969 #103969
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Von wievielen Monaten sollen die Backups 1./11./21. aufgehoben werden? 2 Monate,3 Monate, halbes Jahr, Jahr?
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/
renee
 2007-12-17 10:47
#103972 #103972
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
*) behält alle Dateien der letzten 5 Tage
*) behält alle Dateien von einem 11. oder 21. der letzten 6 Monate
*) behält alle Dateien von einem 01. eines jeden Monats

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
67
68
69
#!/usr/bin/perl

use strict;
use warnings;
use Date::Calc qw(Add_Delta_Days Add_Delta_YM Today);
use File::Spec;
use POSIX;

my $directory = './';
my $logfile   = './deleted_files.log';

my @files = _get_filenames( $directory );
@files    = _clean_list( @files );
_delete_files( $directory, $logfile, @files );

###
# Subroutines
###

sub _get_filenames{
   my ($dir) = @_;
   
   opendir my $dirh, $dir or die $!;
   my @files = grep{ /^\w+\_\d{8}-\d{6}\.tar\.gz$/ }readdir $dirh;
   closedir $dirh;
   
   return @files;
}

sub _clean_list{
   my @files = @_;
   
   my @dates;
   
   my @today = Today();
   
   # keep today's files
   push @dates, sprintf "%04d%02d%02d", @today;
   
   # keep files of 5 last days
   for (1..4){
      push @dates, sprintf "%04d%02d%02d", Add_Delta_Days( @today, $_ * -1 );
   }

   # keep files of 11th, 21st of the last 6 months
   for (0..5){
      my ($year,$month,$day) = Add_Delta_YM( @today, 0, $_ * -1 );
      for( 11, 21 ){
         push @dates, sprintf "%04d%02d%02d", $year,$month, $_;
      }
   }

   # filter filenames
   @files = grep{ my ($f) = $_ =~ /^\w+\_(\d{8})/; 
                 !( grep{ $f == $_ }@dates or $f =~ /01$/ )
                }@files;
}

sub _delete_files{
   my ($dir,$log,@files) = @_;
   
   open my $fh_log, '>>', $log or die $!;
   for my $file ( @files ){
      my $time = POSIX::strftime( '%Y%m%d-%H%M%S', localtime);
      my $fqfn = File::Spec->catfile( $dir, $file );
      unlink $fqfn and print $fh_log $time,"\t",$file,"\n";
   }
   close $fh_log;
}
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/
pktm
 2007-12-17 12:04
#103974 #103974
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Mein Änderungsvorschlag:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

=comment

*) behält alle Dateien der letzten 5 Tage
*) behält alle Dateien von einem 11. oder 21. der letzten 6 Monate
*) behält alle Dateien von einem 01. eines jeden Monats

=cut

# ... Skript wie oben


:D
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2007-12-18 17:28
#104010 #104010
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hallo Renée,

vielen Dank, das sieht toll aus.

Ich teste es heute abend und baue es vermutlich ein. Lediglich das open in _delete_files will ich durch ein sysopen mit O_EXCL | ... ersetzen, obwohl es bei diesem Script derzeit noch (und vermutlich nie) keine Rolle spielt, weil es alleine auf dieser Datei rumfuhrwerkt...

Gruss,

Strat
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2007-12-16 14:03.