#!/usr/local/python3
# -*- coding: utf-8 -*-
# @Date : 2018-04-15 09:00:00
# @Author : Canon
# @Link : https://www.python.org
# @Version : 3.6.1
"""
python sys.argv[0] sys.argv[1]
sys.argv[0]: 脚本路径
sys.argv[1]: 备份测试环境项目的文件夹
执行脚本示例:
python /home/mirror/BuildDir/PyScript/daily_backup.py oms
"""
import os
import datetime
import sys
# 打包的文件夹
dir_name = sys.argv[1].lower()
def get_date_list(program):
""" 获取保留的日期 (最近7天及这四个月 (1, 4, 7, 10) 每月1号) """
date_list = []
# 获取最近7天的日期
date_num = 0
for n in range(7):
date_val = datetime.date.today() - datetime.timedelta(days=date_num)
date_list.append(program + "_" + date_val.strftime('%Y%m%d') + ".tar.gz")
date_num += 1
# 初始日期
datestart = datetime.datetime.strptime('2018-01-01','%Y-%m-%d')
# 当月1号
num = 1
month_num = datetime.date.today().replace(day=num)
# 当日到初始日期相差的月数
diff = abs((month_num.year - datestart.year) * 12 + (month_num.month - datestart.month) * 1) + 1
for n in range(diff):
# 只保留 1, 4, 7, 10 这四个月的备份
if month_num.strftime('%m') in ['01', '04', '07', '10']:
date_list.append(program + "_" + month_num.strftime('%Y%m%d') + ".tar.gz")
month_num = (month_num - datetime.timedelta(num)).replace(day=num)
return date_list
def get_bakfiles(file_dir):
""" 获取备份目录下的所有文件名 """
for root, dirs, files in os.walk(file_dir):
return files
def pack_file(proj_dict):
""" 备份文件 """
num = int(datetime.datetime.now().strftime("%H"))
# 备份文件后缀
suffix = ".tar.gz"
# 判断时间在0时到6时,备份日期为昨天
if num >= 0 and num <= 6:
now = "_" + str(datetime.date.today()-datetime.timedelta(days=1)).replace("-", "")
else:
now = "_" + str(datetime.date.today()).replace("-", "")
init_path = proj_dict["init_path"]
proj_name = proj_dict["name"]
bak_path = proj_dict["bak_path"]
print("备份项目:{0}".format(proj_name))
# 备份文件
bak_file = bak_path + "/" + proj_name + now + suffix
print("备份文件:{0}".format(bak_file))
os.system("tar -zcf {0} -C {1} {2}".format(bak_file, init_path, proj_name))
proj_list = [
{
"name": "PaymentGateway",
"init_path": "/usr/local/apps/PG",
"bak_path": "/home/mirror/DailyBak/PaymentGateway"},
{
"name": "AutoCheckInterface",
"init_path": "/usr/local/apps/ACI",
"bak_path": "/home/mirror/DailyBak/AutoCheckInterface"},
{
"name": "AdminSystem",
"init_path": "/usr/local/apps/AS",
"bak_path": "/home/mirror/DailyBak/AdminSystem"},
{
"name": "NewMerchantSystem",
"init_path": "/usr/local/apps/NM",
"bak_path": "/home/mirror/DailyBak/NewMerchantSystem"},
{
"name": "oms",
"init_path": "/usr/local/apps/OMS",
"bak_path": "/home/mirror/DailyBak/OMS"}
]
# 备份项目
if dir_name == "all":
for item in proj_list:
# 备份所有项目
pack_file(item)
# 保留15天内及每月1号的备份数据
for file_name in get_bakfiles(item["bak_path"]):
if file_name not in get_date_list(item["name"]):
# 删除备份数据
os.system('rm -rf {}'.format(item["bak_path"] + "/" + file_name))
print("删除备份文件:{0}".format(file_name))
elif dir_name == "paymentgateway":
# 备份: 支付网关
pack_file(proj_list[0])
elif dir_name == "autocheckinterface":
# 备份: 对账平台
pack_file(proj_list[1])
elif dir_name == "adminsystem":
# 备份: 管理后台
pack_file(proj_list[2])
elif dir_name == "newmerchantsystem":
# 备份: 账户后台
pack_file(proj_list[3])
elif dir_name == "oms":
# 备份: OMS 项目
pack_file(proj_list[4])
网友评论