#!/usr/bin/perl -w ### set initial variables $user = ''; $host = ''; $priv_key = ''; $remote_dir = ""; $source_dir = ''; $log_dir = ''; ### set system commands/configs/flags my $rm_cmd = '/bin/rm -rf'; my $touch_cmd = '/bin/touch'; my $ssh_cmd = '/usr/bin/ssh -i'; my $DEBUG = 2; ### set rsync commands/flags my $rsync_cmd = '/usr/bin/rsync -Pav -e'; my $del_flag = "--remove-source-files"; ### set file names/extensions my $semaphore = "rsync_running.lock"; my $log_file = "rsync.output.log"; my $file_ext = "*.gz"; sub filesize { use File::Find; find( sub { -f and ( $size += -s ) }, $source_dir ); $size = sprintf( "%.02f", $size / 1024 / 1024 ); open STDOUT, ">> $log_dir/$log_file" or die "$0: open: $!"; open STDERR, ">>& STDOUT" or die "$0: dup: $!"; print "Directory '$source_dir' contains $size MB\n"; } sub getLoggingTime { ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = gmtime(time); $nice_timestamp = sprintf( "%04d%02d%02d %02d:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec ); return $nice_timestamp; } sub rsyncfiles { if ( -f "$source_dir/$semaphore" ) { print "Rsync running, skipping this session.\n" if ( $DEBUG > 2 ); } else { system("$touch_cmd $source_dir/$semaphore"); my $push_cmd = "$rsync_cmd \"$ssh_cmd $priv_key\" $del_flag $source_dir/$file_ext $user\@$host:$remote_dir"; print "Running: $push_cmd\n" if ( $DEBUG > 1 ); my $return = system($push_cmd); if ($return) { print "rsync failed"; } } system("$rm_cmd $source_dir/$semaphore"); } @timeData = gmtime(time); my $timestamp = getLoggingTime(); open STDOUT, ">> $log_dir/$log_file" or die "$0: open: $!"; open STDERR, ">>& STDOUT" or die "$0: dup: $!"; print "The script ran at $timestamp \n"; &filesize; &getLoggingTime; &rsyncfiles;