[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;