それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

n世代のバックアップを保存するRubyスクリプト

設定フォルダをバックアップ取りたい。N世代のバックアップを取る方法は幾つもあるし、
1日毎にバックアップを取得するならコマンドで済む

毎日のバックアップ

rsync -a /var/www /var/back/`date -I`/

コレだと、ファイルを作りすぎるので直近5件だけでいい。

直近五件をスクリプトでやる

def backup_generation(src, backupdir,n=5)
    dist = File.expand_path(backupdir)
    src  = File.expand_path(src)
    name = File.basename(src)
    cmds = []
    (n-1).times{|i|
      cmds << "mv #{dist}/#{name}.#{i}.tgz #{dist}/#{name}.#{i+1}.tgz" if File.exists? "#{dist}/#{name}.#{i}.tgz"
    }
    cmds.reverse!
  cmds << "tar cvzf #{dist}/#{name}.0.tgz  #{src}"
  puts cmds
    cmds.each{|cmd|
      `#{cmd}`
    }

end

crontab は管理が面倒なのでDaemonにした

Crontab は登録したことを忘れるので、init.d に登録して自動起動にする。
Daemonsをつかうとinit スクリプトになるので重宝している。

require 'daemons'

dir = File.expand_path(Dir.pwd)
worker = Proc.new{
    loop{
        backup_generation("#{dir}/exmample.com/","#{dir}/../www.back")
        sleep 60*60*24*3
    }
}


Daemons.run_proc("www_backup",&worker)