[Cologne-pm] script auf mehreren CPU's starten

Cem Sakaryali cem.sakaryali at easi.de
Thu Nov 10 02:52:11 PST 2005


Hallo,

ich habe ein perl script, geschrieben um directorys zu
gzippen und taren. Anschliessend werden die tar files
auf eine andere Platte geschoben.

ablauf:

gzip dir1/*
tar dir1.tar dir1/
mv dir1.tar blabla/backup

gzip dir2/*
tar dir2.tar dir2/
mv dir2.tar blabla/backup

gzip dir3/*
tar dir3.tar dir3/
mv dir3.tar blabla/backup

gzip dir4/*
tar dir4.tar dir4/
mv dir4.tar blabla/backup

gzip, tar und mv mache ich mit system ()

Meine Frage ist, da die einzelne Dir's mitteinander nichts
zutun haben wuerde ich sie parallel auf mehreren maschienen starten.
Wie kann ich dies machen?


Danke und Gruss
Cem

Hier mein script.

###################


use strict;

my $DirectoryWhereToPut = '/backup';

# dieser Hash ist fuer zukuenftige sachen gedacht.
# Ist hier eigentlich nicht notwendig

my %hash = (
# directory name    directory where to put
a  => 'cem/a'  ,
b  => 'cem/b'  ,
c  => 'cem/c'  ,
d  => 'cem/d'  ,
);

my ($stund,$min,$sec,$tag,$monat,$jahr)=get_time ();

foreach my $Dir (keys %hash) {
    my $TarFileName =
"$Dir"."BACKUP"."_"."$jahr"."_"."$monat"."_"."$tag\.tar";
    CompressFile ($Dir,$TarFileName);
    MoveFile ($TarFileName,$DirectoryWhereToPut);
}


sub CompressFile {
    my ($Dir,$TarFileName) =@_;
    # gzip it
    system ("gzip -rf $Dir/\*");
    print "gzip $Dir done\n";
    # tar it
    system ("tar cvf $TarFileName $Dir/\*");
    print "tar $TarFileName done\n";
    return;
}

sub MoveFile {
    my ($TarFileName,$DirectoryWhereToPut) =@_;
    # move it to DirectoryWhereToPut
    system ("mv $TarFileName $DirectoryWhereToPut");
    print "move $TarFileName to $DirectoryWhereToPut done\n";
    return;
}

sub get_time {
    my ($sec,$min,$stund,$tag,$monat,$jahr,$junk,$day_of_year)=localtime();
    $tag=  sprintf "%2.2d",$tag;
    $monat=sprintf "%2.2d",$monat+1;
    return ($stund,$min,$sec,$tag,$monat,($jahr+1900));
}





More information about the Cologne-pm mailing list