2019-05-29 Python+ Crontab 实现同步主备机配置文件

今天要实现两台KEA服务器的配置文件同步。
首先看了一下主备机的服务器配置文件有哪些不同,可以发现,只有两处不同的地方,这样就简单了。

root@AX:/home/keabackup# diff kea-dhcp6-82.conf kea-dhcp6_66.conf
5c5
<         "interfaces": ["ens3/2A02:xxxx:0:100::2"]
---
>         "interfaces": ["ens3/2A02:xxxx:0:800::2"]
61c61
<                     "this-server-name": "server1",
---
>                     "this-server-name": "server2",

那么整个脚本的思路就是这样:
1、取得两台服务器的配置文件(暂时叫A和B)。
2、读取主服务器配置文件A,生成要推送到备机的配置文件C。
3、生成要执行的系统命令,cp 、scp这些。
4、比较C和B文件,如果C文件比较大,就执行系统命令,推送配置到备机。这里因为考虑到配置文件的更新是按照固定模板添加的,文件大小会逐渐增加。
5、成功或失败都写一条日志。
这里用到的知识点有:

文件的读写
日期函数,时间戳和日期
I/O操作
字符串操作
Linux 定时任务
ssh免密登录

下面是python脚本,因为文档所在目录都是固定的,就直接引用绝对目录。预先配置两台服务器之间互相免密登录。
sync-kea.py内容如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import time
import datetime

# 时间戳函数

def TimeStampToTime(timestamp):
    timeStruct = time.localtime(timestamp)
    return time.strftime('%Y-%m-%d %H:%M:%S', timeStruct)

# 获取文件大小

def get_FileSize(filePath):
    fsize = os.path.getsize(filePath)
    fsize = fsize / float(1024 * 1024)
    return round(fsize, 2)

# 获取创建时间
def get_FileCreateTime(filePath):
    t = os.path.getctime(filePath)
    return TimeStampToTime(t)

def Trans_82_66(file_name):  # 转换主服务器的配置文件到备份服务器,输出新配置文件
    with open(file_name, 'r') as f:
        c1 = f.read().replace("2A02:xxxx:0:100", "2A02:xxxx:0:800")
        c2 = c1.replace("server1", "server2", 1)
    today = datetime.date.today()
    todaystr = today.strftime('%Y-%m-%d')

    new_file_name = todaystr + '_' + file_name
    with open(new_file_name, 'w') as f1:
        f1.write(c2)
        print("Configuration for KEA backup server is created: ",
              new_file_name)
    return (new_file_name)

def main():
    # 拷贝配置文件到备份文件夹
    os.popen(
        "cp /usr/local/etc/kea/kea-dhcp6.conf /home/keabackup/kea-dhcp6-82.conf"
    ).read()
    # 抓取备机的配置文件
    os.popen(
        "scp root@xx.xxx.xxx.66:/usr/local/etc/kea/kea-dhcp6.conf kea-dhcp6_66.conf"
    ).read()

    # 转换配置文件
    file_name = "kea-dhcp6-82.conf"
    # Trans_82_66(file_name)

    # 拷贝转换好的文件到备份服务器
    new_file = Trans_82_66(file_name)

    # 获得备机配置文件和主机生成的配置文件大小
    size1 = get_FileSize('/home/keabackup/kea-dhcp6_66.conf')
    size2 = get_FileSize(new_file)

    # 生成要执行的命令变量
    opcmd = "scp " + new_file + " root@xx.xxx.xxx.66:/home/keabackup/"   #当天主机的备份配置
    opcmd1 = "scp " + new_file + " root@xx.xxx.xxx.66:/usr/local/etc/kea/kea-dhcp6.conf"     #推送到备机的配置文件
    if size2 >= size1:
    # 如果拷贝成功写入日志
        log = 'Successfully Sync dhcp6 configuration from 82 to 66 on ' + TimeStampToTime(time.time()) + '^_^')
        os.popen(opcmd).read()
        os.popen(opcmd1).read()
        print(log)
        with open('kea_backup.log', 'a') as f:
            print(log, file=f)
    else:
        print('Something is wrong. ')
        with open('kea_backup.log', 'a') as f:
            print('Something is wrong! ', 'Not ' + log, file=f)

if __name__  == "__main__":
    main()

BTW, 这个脚本运行在主服务器上,另外配置了定时任务,每天凌晨首先把两台服务器的关键文件备份到AWS S3服务器, 再运行同步脚本把主服务器的配置同步到备用服务器上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,844评论 0 5
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,985评论 0 13
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,958评论 6 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,097评论 1 32
  • 运维核心工作: 操作系统安装(物理机、虚拟机)--> 应用程序包部署(安装、配置、服务启动 )--> 批量操作 -...
    Net夜风阅读 1,524评论 0 4