最后更新于 .

最近有点背,在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 &

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 可可火山

    可可火山 on #

    expect是基于TCL语法的。介绍expect的书不多,有本但也绝版。看看tcl语法应该也能了解一二。
    set dir [lindex $argv 0]

    应该只要接个字符就可以吧?
    set dir `date +%m/%d`

    没时间测试,博主看看?

    Reply

    1. 可可火山

      可可火山 on #

      查了下,tcl语法应该这样来取。 expect一直想深入下,那本exploring expect书只整到部分。不过看TCL语法也OK了。

      set dir [ exec date +%m/%d ]

      Reply

      1. Dante

        Dante on #

        呵呵,多谢多谢,明天去公司试试,一直没接触过这个东西呢~~

        Reply

      2. Dante

        Dante on #

        哈哈,试了一下,果然可以~~这样就省了外层的py啦~~

        Reply

        1. 可可火山

          可可火山 on #

          呵呵 nice

          Reply

      3. 依云

        依云 on #

        我一直找不到 expect 的资料,所以折腾没一天就放弃了,改为直接拿 python 搞定。有个 pexpect 不错的。

        Reply

  2. 铁牛仔

    铁牛仔 on #

    呵呵,不久前我也遇到这个这个rsync的备份问题。上网拼命地搜了下最终给搞出来了。我使用的是ssh密钥的方式。整理一份自认为挺详细的教程在这里:http://tieniuzai.com/?p=203,博主可以参考下。

    Reply

    1. Dante

      Dante on #

      一开始也打算用ssh密钥的方式,只是公司用的是ssh2,结果每次都失败。。

      Reply

      1. 铁牛仔

        铁牛仔 on #

        呵呵。rsync备份文件速度真的好快的说。不过现在我遇到一个问题,就是偶尔会出现其他同事修改过的文件rsync检索增量文件的时候检索不到,搞到我每次还得打开那个文件加几个空格进去才行。郁闷....关于这个问题大家有什么好的解决办法吗?又难道是我的同步脚本写得太搓的原因?

        Reply

        1. Dante

          Dante on #

          唉,可惜rsync的备份服务一直用不了。。。所以帮不了你。。

          Reply

  3. jiaion

    jiaion on #

    可以完全用Python实现的 安装下pextect 就好了.

    Reply

    1. Dante

      Dante on #

      哈,搜了一下,果然有啊:
      http://pypi.python.org/pypi/pexpect/

      Reply

  4. zwssd

    zwssd on #

    冒似我以前用过expect这东西,用来登陆服务器什么的很好用。主要就是调试了很久。我记得是用十行代码搞定。

    Reply

    1. Dante

      Dante on #

      是啊,expect的学习资料很少,所以用起来比较纠结。。

      Reply

发表评论