找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1858|回复: 0

[求助] 写了个备份脚本,差不多抓1000多个文件后就停掉了报错

1

主题

2

帖子

2

积分

贫民

积分
2
bb3155135 发表于 2018-7-30 11:30:33 | 显示全部楼层 |阅读模式
[192.168.0.191] run: pwd
[192.168.0.191] out: /home/bliu/5279/layout/IFAMP_2Aext/layout
[192.168.0.191] out:
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.6/site-packages/Fabric3-1.14.post1-py3.6.egg/fabric/main.py", line 763, in main
    *args, **kwargs
  File "/usr/local/python3/lib/python3.6/site-packages/Fabric3-1.14.post1-py3.6.egg/fabric/tasks.py", line 387, in execute
    multiprocessing
  File "/usr/local/python3/lib/python3.6/site-packages/Fabric3-1.14.post1-py3.6.egg/fabric/tasks.py", line 277, in _execute
    return task.run(*args, **kwargs)
  File "/usr/local/python3/lib/python3.6/site-packages/Fabric3-1.14.post1-py3.6.egg/fabric/tasks.py", line 174, in run
    return self.wrapped(*args, **kwargs)
  File "/backupquantum/backup.py", line 127, in run_backup
    get_incbackup(i)
  File "/backupquantum/backup.py", line 52, in get_incbackup
    get_incbackup(dire)
  File "/backupquantum/backup.py", line 52, in get_incbackup
    get_incbackup(dire)
  File "/backupquantum/backup.py", line 52, in get_incbackup
    get_incbackup(dire)
  File "/backupquantum/backup.py", line 47, in get_incbackup
    get_fullbackup(directory)
  File "/backupquantum/backup.py", line 35, in get_fullbackup
    get_fullbackup(dire)          # if it's directory ,go back cicle
  File "/backupquantum/backup.py", line 37, in get_fullbackup
    file_get = get(fil, fil)      # to the local path
  File "/usr/local/python3/lib/python3.6/site-packages/Fabric3-1.14.post1-py3.6.egg/fabric/network.py", line 692, in host_prompting_wrapper
    return func(*args, **kwargs)
  File "/usr/local/python3/lib/python3.6/site-packages/Fabric3-1.14.post1-py3.6.egg/fabric/operati**.py", line 540, in get
    ftp = SFTP(env.host_string)
  File "/usr/local/python3/lib/python3.6/site-packages/Fabric3-1.14.post1-py3.6.egg/fabric/sftp.py", line 34, in __init__
    self.ftp = connecti**[host_string].open_sftp()
  File "/usr/local/python3/lib/python3.6/site-packages/paramiko-2.4.1-py3.6.egg/paramiko/client.py", line 521, in open_sftp
    return self._transport.open_sftp_client()
  File "/usr/local/python3/lib/python3.6/site-packages/paramiko-2.4.1-py3.6.egg/paramiko/transport.py", line 980, in open_sftp_client
    return SFTPClient.from_transport(self)
  File "/usr/local/python3/lib/python3.6/site-packages/paramiko-2.4.1-py3.6.egg/paramiko/sftp_client.py", line 139, in from_transport
    chan.invoke_subsystem('sftp')
  File "/usr/local/python3/lib/python3.6/site-packages/paramiko-2.4.1-py3.6.egg/paramiko/channel.py", line 63, in _check
    return func(self, *args, **kwds)
  File "/usr/local/python3/lib/python3.6/site-packages/paramiko-2.4.1-py3.6.egg/paramiko/channel.py", line 267, in invoke_subsystem
    self._wait_for_event()
  File "/usr/local/python3/lib/python3.6/site-packages/paramiko-2.4.1-py3.6.egg/paramiko/channel.py", line 1198, in _wait_for_event
    raise e
paramiko.ssh_exception.SSHException: Channel closed.

[localhost] local: echo ['/backupquantum/home/bliu/5279/layout/IFAMP_2Aext/layout/pc.db'] \<--- 192.168.0.191//home/bliu/5279/layout/IFAMP_2Aext/layout/pc.db >> /backupquantum/backup.log
Disconnecting from 192.168.0.191... done.


开始以为是哪个文件有问题,但是单独用这个脚本跑这个文件就能成功,整体跑,抓一千多个文件左右后 就报上面错了 ,求助大神?什么情况,以下是我的脚本。。:

#!/usr/bin/env Python
# -*- coding:utf-8 -*-

import time
import os
import paramiko
from fabric.api import *
from fabric.colors import *

env.hosts = ['192.168.0.191']
env.user = 'root'
env.key_filename = '/root/.ssh/id_rsa'
#backupdir = ['home','home2','home3','project','apps']
backupdir = ["/home"]
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
key =paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
bksvpath = '/backupquantum/'
host='192.168.0.191'

def get_fullbackup(directory):
    with settings(warn_only=True):
        with cd(directory):
            with lcd(bksvpath + directory):  
                    get_fullbackup(dire)        
                for fil in get_file(directory):  
                    file_get = get(fil, fil)                     
def get_incbackup(directory):
    with settings(warn_only=True):
        with cd(directory):
            if not os.path.exists(bksvpath + directory):
                get_fullbackup(directory)
            else:
                with lcd(bksvpath + directory):
                    for dire in get_dir(directory):
                        get_incbackup(dire)
                    for fil in get_file(directory):
                     
                        os.chdir(bksvpath + directory)
                     
                     
                     
                        if not os.path.exists(fil):
                        
                            file_get = get(fil,fil)
                        elif os.path.exists(fil):
                           
                            remo_md5 = run("md5sum %s | awk '{print$1}'" % fil)
                           
                            s = os.popen("md5sum %s | awk '{print$1}'" % fil)
                            local_md5 = s.readlines()[0].split()[0]
                                         
                            if remo_md5 == local_md5:
                                print("File %s is not changed!" % fil)
                            else:
                                file_get = get(fil,fil)

def get_dir(dire):
    ssh.connect(host,22,env.user,pkey=key)
    stdin,stdout,stderr = ssh.exec_command("cd %s &&ls -l | grep '^d'| awk '{print i$9}' i=`pwd`'/'" % dire)
    #print('host %s ---dir %s :' % (host,backupdir[0]))
    dir_resault = []
    for i in stdout.readlines():
        dir_resault.append(i.split('\n')[0])
    # print(dir_resault)
    ssh.close()
    return dir_resault

def get_file(dire):
    ssh.connect(host,22,env.user,pkey=key)
    stdin,stdout,stderr = ssh.exec_command("cd %s && ls -al | grep '^-'| awk '{print$9}' | egrep -v *\\.trn$\|*\\.dsn$\|*\\.tran$\|*\\.fsdb$\|*\\.vcd$ " % dire)
    file_resault = []
    for i in stdout.readlines():
        file_resault.append(i.split('\n')[0])
    # print(file_resault)
    ssh.close()
    return file_resault


def test(dire):
    with settings(warn_only=True):
        pass




def run_backup():
    backupdate = time.strftime("%Y-%m-%d", time.localtime())
    backup_start_time = time.strftime("%H:%M", time.localtime())
    local("echo ======================================================================================================================== >> /backupquantum/backup.log")
    local("echo ==================%s=start=backup===================== >> /backupquantum/backup.log" % backupdate)
    local("echo ==================start=time==%s=========================== >> /backupquantum/backup.log" % backup_start_time)
    #local_modify_time = os.stat('/root/test/backup.log').st_ctime
    #print(backupdate)
    #print(backup_start_time)
    for i in backupdir:
        get_incbackup(i)
    backupdate_end = time.strftime("%Y-%m-%d", time.localtime())
    backup_end_time = time.strftime("%H:%M", time.localtime())
    local("echo ====================%s=end=backup===================== >> /backupquantum/backup.log" % backupdate_end)
    local("echo ====================end=time==%s=========================== >> /backupquantum/backup.log" % backup_end_time)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表