Chinaunix首页 | 论坛 | 博客
  • 博客访问: 290027
  • 博文数量: 46
  • 博客积分: 528
  • 博客等级: 中士
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-20 15:36
文章分类

全部博文(46)

文章存档

2017年(1)

2015年(8)

2014年(2)

2013年(19)

2012年(16)

分类: Python/Ruby

2013-06-04 09:58:11

初学python写个脚本练练手。。。
下文中的sedmails这个模块是我自己写的一个py文件,里面就一个send_mail函数
好了 上代码

  1. #!/usr/bin/env python
  2. #-*-coding:utf-8-*-
  3. #filename auto backup
  4. #version 1.0
  5. import os,sys,time,smtplib,sedmails,commands
  6. date_sys=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
  7. mail_to="qqq@163.com"
  8. backup_lock='/home/qidunhu/back_lock' #备份锁文件
  9. if os.path.exists('/home/qidunhu/back_lock'):#判断锁文件是否存在,若是存在则发送邮件后退出
  10.         sedmails.send_mail(mail_to,"备份警告","上次备份没有结束,请检查,请等待上次备份结束之后,再启动本次备份!")
  11.         os._exit(0)
  12. else:
  13.         commands.getoutput("touch /home/qidunhu/back_lock") #若是没有锁文件,则创建,然后执行备份脚本
  14. def get_dir(path):
  15.         #print path, 'n'
  16.         return os.listdir(path)
  17. def bak_file(path,path_bak):
  18.         list=os.listdir(path)
  19.         #back_log="/home/qidunhu/qidunhu/bak_test/backup.log"
  20.         for i in list:
  21.                 file_path=os.path.join(path,i)
  22.                 file_path_bak=os.path.join(path_bak,i)
  23.                 #print file_path_bak
  24.                 #print file_path
  25.                 if os.path.isdir(file_path): #判断文件路径是否为目录
  26.                         if not os.path.isdir(file_path_bak):
  27.                                 create_dirs= '''mkdir -p '%s' ''' % (file_path_bak) #如果目录不存在则创建
  28.                                 if os.system(create_dirs) == 0: #判断目录是否存在
  29.                                         #print create_dirs
  30.                                         pass
  31.                                 else:
  32.                                         back_fail_log=file("/home/qidunhu/back_fail_log",'a')
  33.                                         print >> back_fail_log,date_sys,"创建目录失败,请检查!" '\n \n'
  34.                                         back_fail_log.close()
  35.                                         os._exit(0)
  36.                         bak_file(file_path,file_path_bak)
  37.                 else: #如果文件存在,则判断时间戳
  38.                         if os.path.isfile(file_path_bak):
  39.                                 stat_bak = os.stat(file_path_bak)
  40.                                 stat_source = os.stat(file_path)
  41.                                 if stat_source.st_mtime <= stat_bak.st_mtime: #判断文件修改时间
  42.                                         continue
  43.                         cp_comm='''cp -r '%s' '%s' ''' % (file_path,file_path_bak)
  44.                         #print cp_comm
  45.                         if os.system(cp_comm) == 0:
  46.                                 back_log=file("/home/qidunhu/back_log",'a')
  47.                                 print >> back_log, cp_comm,'n'
  48.                                 print >> back_log,date_sys,"以上数据备份成功!" '\n'
  49.                                 back_log.close()
  50.                         else:
  51.                                 back_fail_log=file("/home/qidunhu/back_fail_log",'a')
  52.                                 print >> back_fail_log,date_sys,"备份失败,请检查!" '\n \n'
  53.                                 back_fail_log.close()
  54.                                 os._exit(0)

  55. #定义源文件路径
  56. path='/home/qidunhu/qidunhu/backup/'
  57. #定义备份目标路径
  58. path_bak= '/home/qidunhu/qidunhu/bak_test/'
  59. #开始备份
  60. bak_file(path,path_bak)
  61. os.remove("/home/qidunhu/back_lock")#删除锁文件
  62. sedmails.send_mail(mail_to,"data backup end!","Backup has been completed, please check the backup log, to confirm the data is complete path for the log: /var/log/backuplog/backup_log or /var/log/backuplog/backup_fail_log")
写完这个脚本后我发现,python有一个logging模块,可以自己记录日志,功能很是强大,但是由于比较懒,也就没有修改代码.....
阅读(2084) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~