首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果脚本停止工作但仍显示在supervisor下运行,如何重新启动脚本

如果脚本停止工作但仍显示在supervisor下运行,如何重新启动脚本
EN

Stack Overflow用户
提问于 2017-03-06 17:38:13
回答 1查看 392关注 0票数 2

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

我选择了supervisor,因为它会在机器启动时自动启动脚本,当脚本“死”的时候

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

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

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

它仍然显示为在supervisor下运行,并且在其理应停止写入running.log的时间内没有异常。

然而,它停止了对running.log脚本的写入,尽管成功执行了5个小时。

然后,我在supervisor下手动重新启动了该服务。

我有什么选择?

EN

回答 1

Stack Overflow用户

发布于 2017-03-06 19:59:11

我能想到两个选择:

1.找到bug

脚本没有响应,但还没有死。这意味着它已经死锁了自己,或者进入了无限循环,或者被锁定在某个I/O过程中,或者其他什么。

我要说的是,找到bug并移除它是一个很好的行动!您可以查看代码并感觉可能发生的情况,添加一些日志详细信息或类似的内容。或者您可以对其进行调试。有一些机制可以将调试器附加到正在运行的Python脚本:https://wiki.python.org/moin/DebuggingWithGdb

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

2.添加一些看门狗机制

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

代码语言:javascript
复制
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,))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42622096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档