用`while true`循环意外退出后python重新启动

问题描述 投票:0回答:3

我用while true编写了一个python脚本来执行捕获电子邮件附件的任务,但有时我发现它会在服务器上意外退出。

l在我的本地运行它超过4个小时没有问题,所以我可以确认代码是正确的。

那么有一种机制在意外退出时重启python,比如进程监控吗?我是linux的新手。

备注:我在shell脚本中运行像python attachment.py &这样的python脚本。

python shell
3个回答
2
投票

虽然@ triplee的评论肯定会成功,但我担心会发生一些事情,你会更好地理解。也就是说,脚本失败的原因。

没有进一步的细节,很难推测可能发生的事情。作为第一次调试工作,您可以尝试在while True块中的try ... except...中包装整个主体,并使用except块来记录错误和/或程序状态。那是,

while True:
    try:
        ... do some stuff...
    except:
        ... log the exception, print to screen, record the values of key variables, etc.
        continue

这将允许您了解故障期间发生的情况,并编写处理该事件的更强大的代码。


0
投票

l在我的本地运行它超过4个小时没有问题,所以我可以确认代码是正确的。

你可能会惊讶于几个月之后只显示错误的数量,如果没有多年的正确处理...你确认的是代码不会在第一次操作时中断,但除非你在输入中测试了所有可能的极端情况(包括格式错误的)你无法确认它永远不会破坏。

这就是为什么一个意图无意中运行的程序应该经过精心设计,以便在退出之前始终(尝试*)留下痕迹的原因。 try: except:logging模块是你最好的朋友。


*在系统崩溃或断电的情况下,您无法在用户程序级别执行任何操作...


0
投票

您可以尝试使用Supervisor来管理您的流程。 Supervisor能够配置进程退出状态的bevhiour并尝试重新启动它。

随附的是official documentexample in Ubuntu

示例配置

[program:nodehook]
command=/usr/bin/node /srv/http.js
directory=/srv
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/webhook/nodehook.err.log
stdout_logfile=/var/log/webhook/nodehook.out.log
user=www-data
environment=SECRET_PASSPHRASE='this is secret',SECRET_TWO='another secret
© www.soinside.com 2019 - 2024. All rights reserved.