Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @rem = '-*- Perl -*-';
- @rem = '
- @echo off
- perl -S %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
- goto endofperl
- ';
- # INCREMENTAL BACKUP SCRIPT.
- #
- # Author: Toli Lerios
- use strict;
- use English;
- use File::Remove;
- use Net::SMTP;
- use Sys::Hostname;
- # Error checking.
- if (@ARGV!=0) {
- warn "\n";
- warn "Usage: ",__FILE__,"\n";
- die "\n";
- }
- # Configuration.
- my($password)="Mykalani1";
- my($rsync)="C:/Progra~1/cwRsync/bin/rsync.exe --exclude /public/Temp/";
- my($src)="backups\@10.10.1.4::data/";
- my($dst_root)="E:/backups/KServer";
- my($max_copies)=30;
- my($smtp_host)="mondeo.websitewelcome.com";
- my($email_self)="backups\@kalani.com";
- my(@email_admins)=
- ("<lydia\@kalani.com>",
- "<it\@kalani.com>",
- "<paul\@kalani.com>"); # Set to () to stop email notifications.
- my($host)=hostname();
- # Ensure existence of subdirectories.
- my($files_dir)=$dst_root."/files";
- mkdir($files_dir,0777) if (!(-e $files_dir));
- my($log_dir)=$dst_root."/logs";
- mkdir($log_dir,0777) if (!(-e $log_dir));
- # Remove old backups (and associated logs).
- my(@old_backups)=sort(glob($files_dir."/*"));
- while (scalar(@old_backups)>=$max_copies) {
- my($old_backup)=shift(@old_backups);
- warn "Removing ".$old_backup."\n";
- File::Remove::remove(\1,$old_backup);
- my($date)=($old_backup=~m@/([^/]+)$@);
- unlink($log_dir."/".$date.".txt");
- }
- # Copy changed files.
- my($link_opt)="";
- if (scalar(@old_backups)>0) {
- $link_opt="--link-dest=".pop(@old_backups)." ";
- }
- my($dum,$dum,$dum,$mday,$mon,$year)=localtime();
- my($date)=sprintf("%04d_%02d_%02d",$year+1900,$mon+1,$mday);
- $ENV{"RSYNC_PASSWORD"}=$password;
- my($dst)=$files_dir."/".$date;
- $dst=~s@(\w):@/cygdrive/\1@;
- my($out)=$log_dir."/".$date."_".$host."_out.txt";
- my($err)=$log_dir."/".$date."_".$host."_err.txt";
- my($cmd)=$rsync." -v -a --delete ".$link_opt.$src." ".$dst.
- " 1>".$out." 2>".$err;
- warn "Running ".$cmd."\n";
- system($cmd);
- if ((-s $err)==0) {
- unlink($err);
- } else {
- warn "Errors occured.\n";
- if ($#email_admins>0) {
- warn "Sending error report.\n";
- my($smtp)=Net::SMTP->new($smtp_host);
- $smtp->auth($email_self,$password);
- $smtp->mail($email_self);
- my($email_admin);
- foreach $email_admin (@email_admins) {
- $smtp->to($email_admin);
- }
- $smtp->data();
- $smtp->datasend("From: Backup script <".$email_self.">\n");
- $smtp->datasend("To: ".join(',',@email_admins)."\n");
- $smtp->datasend("Subject: Nonempty KServer backup error log on ".
- $host."\n\n");
- $smtp->datasend("Nonempty KServer backup error log on ".
- $host."\n\n");
- open(ERR,"<".$err);
- while (<ERR>) {
- $smtp->datasend($_);
- }
- close(ERR);
- $smtp->dataend();
- $smtp->quit();
- }
- }
- die "Done.\n";
- __END__
- :endofperl
Add Comment
Please, Sign In to add comment