我有一个在主管下运行的python脚本。
我选择了主管,因为它会在机器启动时自动启动脚本,并且当脚本应该“#34;死掉”#34;
它的作用是在执行某些操作后每隔3-6秒继续写入日志文件running.log
。
如果有异常,它会将异常写入单独的日志文件。
脚本在5小时后停止写入running.log
,尽管在此期间没有例外。
它仍显示为在主管下运行,并且在它应该停止写入running.log
期间没有例外。
然而,尽管已经成功地进行了5小时,但它仍停止写入running.log
脚本。
然后我在主管下再次手动重启服务。
我有什么选择?
答案 0 :(得分:1)
我可以想到两个选择:
脚本没有响应,但没有死。这意味着它已经陷入僵局,或者进入无限循环,或者锁定在某些I / O过程或其他任何过程中。
我会说找到错误并删除它是一个很好的行动方案!您可以查看代码并了解可能发生的位置,添加一些日志详细程度或类似内容。或者你可以调试它。有一些机制可以将调试器附加到正在运行的Python脚本: https://wiki.python.org/moin/DebuggingWithGdb
您需要具备相应权限。如果它是一个生产代码,那那就是坏消息......但是在生产机器中有一个未检测到的未定义的错误感觉不对。那么也许你可以设置一些舞台机器并在那里调试脚本?这样你就可以找到问题所在。
您可以添加一些进程来观看脚本。实际上,脚本本身可以multiprocess
将其注入日志文件修改时间。骨架(未经测试):
def watch(watch_path):
last_modified = <get modification time of watch_path>
while True:
<sleep>
if <check modification times>:
<kill> os.getppid() # kill parent process
else:
last_modified = <get modification time>
...
p = multiprocessing.Process(target=watch, args=(log_output_path,))