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命令可以单击此处深入了解。
发表回复