[slbackup-commit] CVS update: slbackup/src SLBackup.pm slbackup-cron

werner-guest@alioth.debian.org werner-guest@alioth.debian.org
Sun, 28 Nov 2004 12:50:01 -0700


  User: werner-guest
  Date: 04/11/28 12:50:01

  Modified:    src      SLBackup.pm slbackup-cron
  Log:
  added script execution before and after backup's
  
  Revision  Changes    Path
  1.2       +57 -2     slbackup/src/SLBackup.pm
  
  Index: SLBackup.pm
  ===================================================================
  RCS file: /cvsroot/slbackup/slbackup/src/SLBackup.pm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SLBackup.pm	7 Nov 2003 21:52:02 -0000	1.1
  +++ SLBackup.pm	28 Nov 2004 19:50:00 -0000	1.2
  @@ -16,9 +16,11 @@
   
   package SLBackup;
   
  +use POSIX qw(strftime);
   use Exporter;
   @ISA = ('Exporter');
  -@EXPORT = ('slbackup_overwrite',
  +@EXPORT = ('run_scripts',
  +	   'slbackup_overwrite',
   	   'slbackup_readconfig',
   	   'slbackup_writeconfig',
   	   'slbackup_config' );
  @@ -51,6 +53,59 @@
       
       my $datafile = new Config::General();
       $datafile->save_file($datafilename, $data);
  +}
  +
  +
  +# subroutine that runs scripts in a directory which is executable
  +# returns:
  +#  1: successfully executed all scripts in directory
  +#  -1: failed reading $dir
  +#  -2: one or more of the script failed while executing
  +sub run_scripts {
  +    my ($dir, $logfile) = @_;
  +
  +    open (LOG, ">>$logfile") or die ("Unable to open $logfile\n");
  +    logger ("Start running executables in $dir.");
  +
  +    # check that $dir is a directory
  +    if ( ! -d $dir || ! -r $dir ) {
  +	logger ("Failed reading files in script-directory $dir");
  +	return -1;
  +    }
  +
  +    # find and execute all executables in $dir
  +    my $subretval = 1;
  +    my @scripts = `find $dir/ -type f`;
  +    my $script;
  +    
  +    foreach $script (sort @scripts) {
  +	# strip newline
  +	$script =~ tr/\n//d;
  +	# is $script executable?
  +	if ( -x $script ) {
  +	    my $output = `$script 2>&1`;
  +	    my $retval = $?;
  +	    if ( $retval eq 0) {
  +		logger ("Successfully run $script: \n$output");
  +	    } elsif ( $retval ne 0 ) {
  +		$subretval = -2;
  +		logger ("Unsuccessfully run $script:\n$output");
  +	    } else {
  +		logger ("Something strange happened to $script:\n$output");
  +	    }
  +	}
  +    }
  +
  +    logger ("Finished running executables in $dir.");
  +    close (LOG);
  +    return $subretval;
  +}
  +
  +
  +sub logger {
  +    my ($comment) = @_;
  +    my $now = strftime "%b %d %H:%M:%S", localtime;
  +    printflush LOG ("$now - $comment\n");
   }
   
   
  
  
  
  1.11      +31 -42    slbackup/src/slbackup-cron
  
  Index: slbackup-cron
  ===================================================================
  RCS file: /cvsroot/slbackup/slbackup/src/slbackup-cron,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- slbackup-cron	28 Nov 2004 16:16:26 -0000	1.10
  +++ slbackup-cron	28 Nov 2004 19:50:01 -0000	1.11
  @@ -9,16 +9,31 @@
   use strict;
   use Config::General;
   use POSIX qw(strftime);
  -use NET::DNS;
  +use Net::DNS;
   use SLBackup;
   
   my $logfile = "/var/log/slbackup/slbackup.log";
  -
  +my $scripts_predir = "/etc/slbackup/pre.d";
  +my $scripts_postdir = "/etc/slbackup/post.d";
  +my $scripts_logfile = "/var/log/slbackup/run_scripts.log";
   
   # open logfile
   open (LOG, ">>$logfile") or die ("Unable to open $logfile\n");
   logger ("Starting slbackup:");
   
  +# run executables in $scripts_predir
  +my $retval_predir = &run_scripts($scripts_predir, $scripts_logfile);
  +if ( $retval_predir eq 1 ) {
  +    logger ("Successfully running scripts in $scripts_predir.");
  +} elsif ( $retval_predir eq -1 ) {
  +    logger ("Failed reading $scripts_predir.");
  +} elsif ( $retval_predir eq -2 ) {
  +    logger ("Failed to run one or more scripts in $scripts_predir.");
  +} else {
  +    logger ("Something strange happened when running scripts in\n" . \
  +	    "$scripts_predir");
  +}    
  +
   # fetch configuration
   my $conffile = '/etc/slbackup/slbackup.conf';
   my $config = &slbackup_readconfig($conffile);
  @@ -280,6 +295,19 @@
       }
   }
   
  +# run executables in $scripts_postdir
  +my $retval_postdir = &run_scripts($scripts_postdir, $scripts_logfile);
  +if ( $retval_postdir eq 1 ) {
  +    logger ("Successfully running of scripts in $scripts_postdir.");
  +} elsif ( $retval_postdir eq -1 ) {
  +    logger ("Failed reading $scripts_postdir.");
  +} elsif ( $retval_postdir eq -2 ) {
  +    logger ("Failed to run one or more scripts in $scripts_postdir.");
  +} else {
  +    logger ("Something strange happened when running scripts in\n" . \
  +	    "$scripts_postdir");
  +}
  +
   logger ("Finished slbackup.");
   close (LOG);
   
  @@ -288,45 +316,6 @@
       my ($comment) = @_;
       my $now = strftime "%b %d %H:%M:%S", localtime;
       printflush LOG ("$now - $comment\n");
  -}
  -
  -
  -# subroutine that runs scripts in a directory which is executable
  -# returns:
  -#  0: successfully executed all scripts in directory
  -#  1: failed reading $dir
  -#  2: one or more of the script failed while executing
  -sub run_scripts {
  -    my ($dir) = @_;
  -
  -    # check that $dir is a directory
  -    if ( ! -d $dir || ! -r $dir ) {
  -	logger ("Failed reading files in script-directory $dir");
  -	return 1;
  -    }
  -
  -    # find all executables in $dir
  -    my @scripts;
  -    open (FILELIST, `ls $dir`);
  -    while (<FILELIST>) {
  -	if ( -x $dir/$_ ) {
  -	    push @scripts, "$dir/$_";
  -	}
  -    }
  -    close (FILELIST);
  -    
  -    # execute @scripts
  -    my $subretval = 0;
  -    my $script;
  -    foreach $script (sort @scripts) {
  -	my $output = `$script 2>&1`;
  -	my $retval = ! $?;
  -	print "script : $script";
  -	print "retval : $retval";
  -	print "output : $output";
  -    }
  -
  -    return $subretval;
   }
   
   1;