如何在没有回溯错误的情况下使用python脚本调试错误?
此函数发出NetBackup命令,将备份副本升级为主副本 运行此脚本时,它将按预期开始登录终端:如何在没有回溯错误的情况下使用python脚本调试错误?,python,shell,Python,Shell,此函数发出NetBackup命令,将备份副本升级为主副本 运行此脚本时,它将按预期开始登录终端: def make_offsite_copies_primary(): """multi-threaded function to update OFFSITE_PREFIX volumes to primary.""" start_date = time.strftime("%m/%d/%y", time.localtime(t
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()
但是,脚本中似乎没有调用bpchangeprimary命令,因为备份副本没有更改
如果直接从命令行键入“bpchangeprimary-pool MLC-LTO4-Offsite-sd 08/22/2015”,则会对备份副本进行预期更改。但是,函数中的这一行:
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.
应该完成同样的事情,但它不是,所以我猜这个函数有问题。更糟糕的是,没有回溯错误
如果您有任何关于如何解决此问题的帮助或提示,我们将不胜感激。实际上
command=[bpchangeprimary,“-pool”,pool,“-sd”,start\u date]
只是准备要执行的命令,而不是实际执行它
因此,当前位置的logentry()
调用会产生误导性的日志条目
仅在此调用时/之后尝试执行命令:
command = [bpchangeprimary, "-pool", pool, "-sd", start_date]
我首先将您的logentry()
调用(或调整其内容并添加一个新的调用)进一步向下移动,在if下面。。。然后否则…
逻辑意味着限制线程数量-首先获得有意义的完整日志记录
这至少应该说明执行是否超过了线程限制逻辑:
- 如果没有,那么您需要调试该逻辑
- 如果确实如此,则关注多线程上下文中启动的线程和/或实际命令执行
RunMTCommand
类中,记录子进程通过STDOUT和STDERR管道的内容。您认为子进程是什么意思?是否值得尝试从该函数中删除所有线程内容?令人沮丧的是,没有测试环境供我使用,如果我删除线程或更改此函数并运行脚本,可能会造成损坏。您是说将日志条目行移动到函数的底部吗?如果。。。然后否则…和RunMTCommand.newthread(…)
它没有超过线程限制逻辑,因此我试图从该函数中删除所有线程。删除线程的唯一缺点是函数运行时间更长吗?
RunMTCommand.newthread(command, [0, 13, -15])