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

时间:2017-11-22 08:01:26

标签: python shell

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

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

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

备注:我在shell脚本中运行这个python脚本,如python attachment.py &

3 个答案:

答案 0 :(得分: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

这将使您能够了解失败期间发生的情况,并编写更强大的代码来处理该事件。

答案 1 :(得分: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

答案 2 :(得分:0)

  

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

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

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

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