konakona
利用crontab和Python定时备份
利用crontab和Python定时备份

Python代码

 

#! /usr/bin/python2.7
# -*- coding: utf-8 -*-
__author__ = 'konakona'
import os
import sys
import os.path
import time
import  shutil

__VERSION__ = "v1.0";
# 临时存放需要备份的文件,便于打包
tmpDir = '/var/backup/temp'
# 最终备份文件的保存路径。
backPath = '/var/backup'
#目录相对路径
backDirs = ['/var/log/','/var/www/']

def copyFile(source,targetDir):
    # print 'incopyfile source = '+source+',targetDir = '+targetDir
    '对比文件,如果目标文件不存在或者还是源文件新,则拷贝或覆盖文件。'
    target = os.path.join(targetDir,source[:1]=='/' and source[1:] or source)

    if not os.path.exists(target):
        dir,name = os.path.split(target)
        if not os.path.exists(dir):
            os.makedirs(dir)

        shutil.copy(source,target)
        print 'Backup',source

    elif os.path.getmtime(source) > os.path.getmtime(target):
        shutil.copy(source,target)
        print 'Backup',source

def copyDir(top,targetDir):
    '递归地利用 copyFile 函数进行文件夹的拷贝。'
    for root,dirs,files in os.walk(top):
        for file in files:
            filepath = os.path.join(root,file)
            copyFile(filepath,targetDir);

if __name__ == '__main__':
    # if(len(sys.argv) == 2 and sys.argv[1] != '-m') or len(sys.argv) > 2 :
    #     print '''Usage: backup.py [-m] 加入 -m 参数则将 tar 文件移动到 winE 分区中。'''
    #     sys.exit(1)

    date = time.strftime('%y-%m-%d')

    #检查tmpDir的可用性
    if os.path.exists(tmpDir) == False:
        os.system('mkdir 766 %s '% tmpDir)

    for source in backDirs:
        if os.path.isfile(source):
            copyFile(source,tmpDir)
        else:
            copyDir(source,tmpDir)

    #打包临时备份目录的内容到备份目录下
    os.system('cd %s ' % tmpDir)
    os.system('tar -czf %s.tar.gz %s ' % (date,tmpDir))
    os.system('mv %s.tar.gz %s' %(date,backPath))

    #清空备份目录的内容
    os.system('rm -rf %s ' % tmpDir)

    print 'done!'

 

只需修改这三个参数:tmpDir、backPath、backDirs即可。backDirs可以写多个目录(必须为绝对路径),tmpDir是将backDirs下的文件cp过来的临时目录,而当cp完成后,脚本将所有内容tar至backPath下,脚本执行完毕。

计划任务

命令行输入

sudo crontab -e

第一次输入这个命令会让你选择编辑器,选择了合适的编辑器后将打开有点类似host(windows是c:\windows\system32\drivers\etc\hosts)的文件。

在最低添加如下内容:

#每天0点1分执行自动备份命令,并将执行结果保存到日志
1 0 * * * python /var/local/backup.py >> /var/local/backup.log 2>&1

 

如果你希望每几分钟执行一次可以这样:

#每天2分钟执行一次
*/2 * * * *   python /var/local/backup.py >> /var/local/backup.log 2>&1

 

更多具体的crontab命令可以单击此处深入了解。

赞赏
https://secure.gravatar.com/avatar/3b712b34a0e1b689cfb524c9c6bcdc47?s=256&r=g

团哥

文章作者

继续玩我的CODE,让别人说去。 低调,就是这么自信。

发表评论

textsms
account_circle
email

konakona

利用crontab和Python定时备份
Python代码   #! /usr/bin/python2.7 # -*- coding: utf-8 -*- __author__ = 'konakona' import os import sys import os.path import time import shutil __VERSION__…
扫描二维码继续阅读
2013-03-22