繁体   English   中英

如何使用没有追溯错误的python脚本调试错误?

[英]How to debug an error with python script with no traceback errors?

def make_offsite_copies_primary():
    """multi-threaded function to update OFFSITE_PREFIX volumes to primary."""

    start_date = time.strftime("%m/%d/%y",
                           time.localtime(time.time() - DR_TAPE_DATE_RANGE))

    for pool in run_command([vmpool, "-listall", "-b"]).readlines():
        if pool.startswith(OFFSITE_PREFIX):
            pool = pool.split()[0]
            logentry("***\tupdating images for pool: %s" % (pool))
            command = [bpchangeprimary, "-pool", pool, "-sd", start_date]
            RunMTCommand.lck.acquire()
            # If we've reached maxthreads, then wait for one to finish
            if len(RunMTCommand.tlist) >= RunMTCommand.maxthreads:
                RunMTCommand.lck.release()
                RunMTCommand.evnt.wait()
            else:
                RunMTCommand.lck.release()
            # For some reason, we often get a "-15" RC, when updating the
            # MLC-Duplication pool.  Let's just ignore it for now.
            RunMTCommand.newthread(command, [0, 13, -15])

    for bpchange_thread in RunMTCommand.tlist:
        bpchange_thread.join()

此功能发出NetBackup命令以将备份的副本升级为主副本。

运行此脚本后,它将按预期开始登录终端:

Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-2week
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-1month
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-1year
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-Shadow-2week
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-2week-DR-Files
Mon Aug 24 10:04:08 2015 - 17684 - ***  updating images for pool: MLC-Offsite

etc.

但是,脚本中似乎未调用bpchangeprimary命令,因为备份副本不会更改。

如果直接从命令行键入“ bpchangeprimary -pool MLC-LTO4-Offsite -sd 08/22/2015”,则将对备份副本进行预期的更改。 但是,此行在函数内部:

command = [bpchangeprimary, "-pool", pool, "-sd", start_date]

应该完成相同的事情,但是不是,所以我猜想此函数有问题。 更糟的是,没有回溯错误。

任何帮助,或有关如何解决此问题的提示将不胜感激。

实际上, command = [bpchangeprimary, "-pool", pool, "-sd", start_date]只是准备要执行的命令,而实际上并没有执行它。

因此,您在当前位置的logentry()调用会产生误导性的日志条目。

仅在此调用之后/之后尝试执行命令:

RunMTCommand.newthread(command, [0, 13, -15])

首先,将您的logentry()调用(或调整其内容并添加一个新的调用)进一步下移至if... then... else...逻辑之下,以限制线程数-首先获取有意义的日志记录。

这至少应该告诉我们执行是否超出了线程限制逻辑:

  • 如果没有,那么您需要调试该逻辑
  • 如果确实如此,则将重点放在从多线程上下文开始的线程和/或实际命令执行上

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM