class Parachute::Backup
Public Class Methods
new(filename='parachute.yml')
click to toggle source
# File lib/parachute/backup.rb, line 9 def initialize filename='parachute.yml' @servers = ::YAML::load_file(filename) $path = '/share/MD0_DATA/backup' end
Public Instance Methods
rotate(server)
click to toggle source
# File lib/parachute/backup.rb, line 37 def rotate(server) #puts $path + "/" + server print "rotating #{server} backups..." today = Date.today Dir.entries($path + "/" + server).each do |f| if f =~ /(\d\d\d\d\-\d\d\-\d\d)/ d = Date.strptime $1, "%Y-%m-%d" if d > today - 30 or (d.day < 10 and d.wday == 2 and d > today-120) #puts "lo tengo" else #print "#{f} from date #{d}..." FileUtils.rm_rf($path + "/" + server + "/" + f) #puts "deleted !" print "#" end end end puts " done" end
run()
click to toggle source
# File lib/parachute/backup.rb, line 57 def run servers.each do |hostname,server| server['folders'].each do |folder| run_backup(hostname, server['fqdn'], folder) end rotate(hostname) end end
run_backup(server, fqdn, folder)
click to toggle source
# File lib/parachute/backup.rb, line 14 def run_backup(server, fqdn, folder) print "running backup of folder #{folder} on #{server}[#{fqdn}]..." t = Time.now date = t.strftime("%Y-%m-%d_%H.%M") cmd1 = "rsync --archive --one-file-system --hard-links --human-readable --inplace --numeric-ids --delete --verbose --compress --link-dest=#{$path}/#{server}/_#{folder}_#{server}.current root@#{fqdn}:/#{folder}/ #{$path}/#{server}/_#{folder}_#{server}.#{date}/" cmd2 = "rm #{$path}/#{server}/_#{folder}_#{server}.current" cmd3 = "ln -s #{$path}/#{server}/_#{folder}_#{server}.#{date} #{$path}/#{server}/_#{folder}_#{server}.current" start = Time.now out = `#{cmd1}` out =~ /total size is ([\d|\.|B|G|M|K|T]+)/ disk_usage = $1 out =~ /received ([\d|\.|B|G|M|K|T]+)/ received = $1 stop = Time.now out = `#{cmd2}` out = `#{cmd3}` puts " done in #{(stop-start).round(1).to_s}s - disk usage = #{disk_usage}, received data = #{received}" end