python交换机批处理实现自动备份配置文件

因工作原因本人日常会跟大量交换机打些交道,而交换机管理起来如果没有什么集成的网管平台也会挺复杂的。我个人是出于好奇,想深入学习下网管平台那边关于交换机的自动化运维(备份)的一些原理。我用的是python+Tftp64+数据库 这样一个环境。

前期准备:python、Tftp64、HeidiSQL
 

```
# 导入模块
import pymysql
import paramiko
import time
import os
import shutil


############################################################
###这一块主要是用来生成备份的文件名及文件夹名等
############################################################

now = time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime(time.time()))
# 系统当前时间年份
year = time.strftime('%Y', time.localtime(time.time()))
# 月份
month = time.strftime('%m', time.localtime(time.time()))
# 日期
day = time.strftime('%d', time.localtime(time.time()))

# 切换到备份文件路径
os.chdir("D:/Tftpd64/backup")
#年路径
fileYear = os.getcwd() + '/' + year
#月路径
fileMonth = fileYear + '/' + month
#日路径
fileDay = fileMonth + '/' + day
#判断路径是否存在,不存在创建文件夹
if not os.path.exists(fileYear):
    os.mkdir(fileYear)
    os.mkdir(fileMonth)
    os.mkdir(fileDay)
else:
    if not os.path.exists(fileMonth):
        os.mkdir(fileMonth)
        os.mkdir(fileDay)
    else:
        if not os.path.exists(fileDay):
            os.mkdir(fileDay)

############################################################
###这里是链接到数据库的操作
############################################################

# 1.连接到mysql数据库
db = pymysql.connect(host='数据库地址,在本机就localhost',
                     user='数据库账号',
                     password='数据库密码',
                     db='数据库db',
                     charset='utf8')
# localhost连接本地数据库 user 用户名 password 密码 db数据库名称 charset 数据库编码格式

cursor = db.cursor()
#cursor.execute("show tables;")
#swb = cursor.fetchall()  # 返回执行SQL代码后的结果集,默认为元组
#打印
sql = "select * from huawei  "
cursor.execute(sql)
f = cursor.execute(sql)
num = 0
#开始循环

####################################################################
###这里是记录备份的一个日志功能,就显示下正在备份哪台交换机,有没有问题等等
####################################################################

print('开始循环')
log = open('backup.log', 'a')
log.write(now+'——备份时间-----------------------------------\n')
log.close()
while True:
    if num < f:
        row = cursor.fetchone()
        print('此时的row:')
        print(row)
        #上传文件
        # 创建SSH对象
        ssh = paramiko.SSHClient()
        #print('创建SSH对象')
        # 允许连接不在know_hosts文件中的主机
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

        #获取地址
        IP = row[0]
        my = '存备份文件的服务器IP地址'
        User = row[1]
        Pwd = row[2]
        # 连接服务器
        #print('连接服务器')
        ssh.connect(IP, 22, User, Pwd, look_for_keys=False)
        # 执行命令
        #print('执行命令')

        file = IP + '_' + now
        stdin, stdout, stderr = ssh.exec_command(
            ('tftp ' + my + ' put config.cfg %s.cfg') % file)
        
        # 获取命令结果
        res, err = stdout.read(), stderr.read()
        result = res if res else err

        #print(result.decode())
        time.sleep(30)
        # 关闭连接
        ssh.close()
        #print('远程结束')
        print(row)
        #如果文件上传成功
        if os.path.exists('D:\\Tftpd64\\backup\\' + file+ '.cfg'):
            print('上传成功')

            #移动文件
            mv = shutil.move
            mv('D:\\Tftpd64\\backup\\' + file + '.cfg', fileDay)
            #print(IP+'备份完成')
            #写入日志
            log = open('backup.log', 'a')
            log.write(file+'____备份完成'+ '\n')
            log.close()

            time.sleep(5)
            num +=1
        else:
            print(str(row) + '上传失败')
            time.sleep(5)
            num +=1
    #否则退出循环
    else:
        print('--------------华为备份循环结束,退出循环------------------')
        log = open('backup.log', 'a')
        log.write('华为备份循环结束,退出循环\n')
        log.close()
        break
```

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不言仙声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值