IT技术博客大学习 共学习 共进步

rsync自动输入密码实现数据备份

Vimer 2010-07-15 08:46:24 浏览 5,023 次

最近有点背,在64位suse上大家django环境出了一堆问题,最后服务器还不稳定不能用……
由于做不了webserver,所以只能用来做备份服务器了,需求比较简单,就是将源服务器的一个目录每天copy过来做备份。其实就是用rsync或者scp即可,最后的问题就变成了怎么让rsync自动输入服务器密码,结果在网上搜了一下方法,有rsyncserver,公秘钥,之类,杯具的是我配置了一下午也没搞定……

然后想起公司有同事之前做过一个自动登录服务器的脚本,是不是只要改一下执行的命令即可呢?修改后的代码如下:

#!/usr/bin/expect -f
#auto ssh login
proc wait {} {
  expect {
    "*asswor*" {
      send
not!@#rated\n
      expect {
        "*asswor*" {
          puts stderr "Unknown password."
          exit 1
        }
        "$*" { }
        ">*" { }
        "#*" { }
      }
    }
    "$*" { }
    ">*" { }
    "#*" { }
  }
}
if {[llength $argv] < 1} {
  puts "Usage: [exec basename $argv0] Host."
  exit 1
}
set timeout 30
set dir [lindex $argv 0]
set passwd "dantezhu"
#exp_internal 1
spawn mkdir -p /data/mman_backup/$dir
spawn [exec which rsync] dantezhu@10.6.207.84#36000:/home/dantezhu/release/dgwww/upload /data/mman_backup/$dir -ar --progress
expect {
  "*asswor*" {
    send "dantezhu\n"
    wait 
  }
  "*no)?*" {
    send "yes\n";
    expect {
      "*assword*" {
        send "$passwd\n"
        wait 
       }
    }
  }
  timeout {
    puts "Timeout!"
    exit 1
  }
}
interact

由于是在不知道怎么在这个脚本里面获取当前的年月日,所以又在外面写了一层python(表BS我……)

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
import os
timeHere = time.strftime('%m/%d',time.localtime())
cmd = '/home/dantezhu/py_backup/backup_data '+ timeHere
os.system(cmd)

测了一下,一切正常,然后在crontab中加入定时脚本,让它每天0点半执行:

30 0 * * *                      python /home/dantezhu/py_backup/rsync_backup.py >> /data/mman_backup/backup.log 2>&1 &

附:代码下载

建议继续学习

  1. rsync同步的艺术 (阅读 9,461)
  2. Linux探索:一次删除一百万个文件的最快方法 (阅读 6,760)
  3. 仅仅只备份是不够的 (阅读 5,701)
  4. rsync 的核心算法 (阅读 5,481)
  5. 使用scp在windows和Linux之间互传文件 (阅读 5,222)
  6. Dropbox差异同步算法rsync及其改进算法原理 (阅读 5,120)
  7. rman备份对各种数据块操作 (阅读 4,401)
  8. puppet使用rsync来同步文件教程 (阅读 4,080)
  9. mydumper的使用和源代码分析 (阅读 4,060)
  10. MySQL 备份和其恢复机制原理简述 (阅读 4,020)