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