gpt4 book ai didi

python - 如果脚本停止工作但仍显示在主管下运行,如何重新启动脚本

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:38 24 4
gpt4 key购买 nike

我有一个在主管下运行的 python 脚本。

我选择了supervisor,因为它会在机器启动时以及脚本“死亡”时自动启动脚本

它的作用是在执行某些操作后每 3-6 秒继续写入日志文件 running.log

如果有异常,它会将异常写入单独的日志文件。

脚本在 5 小时后停止写入 running.log,尽管在​​此期间没有出现异常。

它仍然显示为在主管下运行,并且在它应该停止写入 running.log 期间没有异常。

尽管成功执行了 5 个小时,但它还是停止写入 running.log 脚本。

然后我在主管下再次手动重新启动服务。

我有什么选择?

最佳答案

我可以想到两个选择:

1。找到错误

脚本没有响应,但并未死亡。这意味着它本身已经死锁,或者进入无限循环,或者锁定在某些 I/O 过程中或其他什么。

我想说,找到错误并删除它是一个很好的做法!您可以查看代码并感受哪里可能发生这种情况,添加一些日志详细信息或类似内容。或者你可以调试它。有一些机制可以将调试器附加到正在运行的 Python 脚本: https://wiki.python.org/moin/DebuggingWithGdb

您需要获得权限才能执行此操作。如果它是生产代码,那么这是个坏消息……但是在生产机器中存在未检测到的未定义错误感觉不太对劲。那么也许您可以设置一些舞台机器并在那里调试脚本?这样你就可以找到问题出在哪里。

2。添加一些看门狗机制

您可以添加一些进程来观看脚本。事实上,脚本本身可以将其多进程转化为某种东西来观察日志文件的修改时间。骨架(未经测试):

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,))

关于python - 如果脚本停止工作但仍显示在主管下运行,如何重新启动脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42622096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com