D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
proc
/
self
/
root
/
usr
/
share
/
doc
/
perl-IPC-System-Simple
/
examples
/
Filename :
rsync-backup.pl
back
Copy
#!/usr/bin/perl -w # The following example code uses IPC::System::Simple to mount # a /mnt/backup directory, run an rsync command, and then unmount # the directory again. use strict; use IPC::System::Simple qw(run capture); use POSIX qw(nice strftime); use Fatal qw(open close nice); use constant NICE_VALUE => 10; die "Must be root" if $> != 0; nice(NICE_VALUE); my $mounted = 0; my $today = strftime('%Y-%m-%d',localtime); # The capture() from IPC::System::Simple either works, or dies. my $machine_name = capture("hostname"); open(my $mtab_fh, '<', '/etc/mtab'); while (<$mtab_fh>) { if (m{/mnt/backup}) { $mounted = 1; last; } } close($mtab_fh); if (not $mounted) { # Our run() from IPC::System::Simple either works, or dies. run(qw(/bin/mount /mnt/backup)); } my $last_backup = ''; foreach my $dir ( glob("/mnt/backup/$machine_name/*") ) { next if not -d $dir; # 'gt' is correct here, since we're delaing with YYYY-MM-DD if ($dir gt $last_backup) { $last_backup = $dir; } } die "Cannot find last backup" unless $last_backup; # 0 - Successful backup # 24 - Files disappeared during backup. This is expected on # an active filesystem, and not considered an error. run([0,24], qw(/usr/bin/rsync -aH --exclude-from=/etc/rsync-ignore), "--link-dest=$last_backup","/", "/mnt/backup/teddybear/$today", ); # Unmount our filesystem if we found it unmounted to begin with. # Again, run() either succeeds, or dies. if (not $mounted) { run(qw(/bin/umount /mnt/backup)); }
Name
Size
Last Modified
Owner
Permissions
Actions
rsync-backup.pl
1.478
KB
October 20 2013 12:38:43
root
0644
2017 © D7net | D704T team