Blame examples/rsync-backup.pl

Packit 164714
#!/usr/bin/perl -w
Packit 164714
Packit 164714
# The following example code uses IPC::System::Simple to mount
Packit 164714
# a /mnt/backup directory, run an rsync command, and then unmount
Packit 164714
# the directory again.
Packit 164714
Packit 164714
use strict;
Packit 164714
use IPC::System::Simple qw(run capture);
Packit 164714
use POSIX qw(nice strftime);
Packit 164714
use Fatal qw(open close nice);
Packit 164714
use constant NICE_VALUE => 10;
Packit 164714
Packit 164714
die "Must be root" if $> != 0;
Packit 164714
Packit 164714
nice(NICE_VALUE);
Packit 164714
Packit 164714
my $mounted = 0;
Packit 164714
my $today   = strftime('%Y-%m-%d',localtime);
Packit 164714
Packit 164714
# The capture() from IPC::System::Simple either works, or dies.
Packit 164714
my $machine_name = capture("hostname");
Packit 164714
Packit 164714
open(my $mtab_fh, '<', '/etc/mtab');
Packit 164714
Packit 164714
while (<$mtab_fh>) {
Packit 164714
	if (m{/mnt/backup}) {
Packit 164714
		$mounted = 1;
Packit 164714
		last;
Packit 164714
	}
Packit 164714
}
Packit 164714
Packit 164714
close($mtab_fh);
Packit 164714
Packit 164714
if (not $mounted) { 
Packit 164714
	# Our run() from IPC::System::Simple either works, or dies.
Packit 164714
	run(qw(/bin/mount /mnt/backup));
Packit 164714
}
Packit 164714
Packit 164714
my $last_backup = '';
Packit 164714
Packit 164714
foreach my $dir ( glob("/mnt/backup/$machine_name/*") ) {
Packit 164714
Packit 164714
	next if not -d $dir;
Packit 164714
Packit 164714
	# 'gt' is correct here, since we're delaing with YYYY-MM-DD
Packit 164714
	if ($dir gt $last_backup) {
Packit 164714
		$last_backup = $dir;
Packit 164714
	}
Packit 164714
}
Packit 164714
Packit 164714
die "Cannot find last backup" unless $last_backup;
Packit 164714
Packit 164714
#  0 - Successful backup
Packit 164714
# 24 - Files disappeared during backup.  This is expected on
Packit 164714
#      an active filesystem, and not considered an error.
Packit 164714
Packit 164714
run([0,24],
Packit 164714
	qw(/usr/bin/rsync -aH --exclude-from=/etc/rsync-ignore), 
Packit 164714
	"--link-dest=$last_backup","/",
Packit 164714
	"/mnt/backup/teddybear/$today",
Packit 164714
);
Packit 164714
Packit 164714
# Unmount our filesystem if we found it unmounted to begin with.
Packit 164714
# Again, run() either succeeds, or dies.
Packit 164714
Packit 164714
if (not $mounted) {
Packit 164714
	run(qw(/bin/umount /mnt/backup));
Packit 164714
}