|
|
1
111
退出代码143表示您的进程被SIGTERM终止。这通常是在您执行任何需要重新启动dynos的命令时发送的(配置:设置、重新启动、缩小…)。 |
|
|
2
12
当它在一段时间内没有收到任何请求时,它处于空闲状态。当它收到请求时,它将重新启动。 |
|
3
8
每天重新启动是Heroku dynos生命周期中的一项定期活动: |
|
|
4
4
这是由于heroku应用程序被dyno停止。
所以你必须重新启动应用程序。
您可以键入
|
|
|
5
4
没有一个答案能解决这个问题。它是 绝对不是 很高兴得到“进程已退出,状态为143”。这是你的应用程序没有正确操作的迹象。 看看这个 page 来自Heroku文档,特别是 重新启动 和 停机 . 基本上,您的测功机可能重新启动的原因有很多。Heroku每24小时自动重新启动一次测功机(手动重新启动和部署将重置这24小时),但也可以出于其他原因重新启动测功机。 重要的是要明白,它可以在任何给定的时间终止,你的应用程序需要考虑到这一点。例如,假设您有一个工作进程,它处理一些队列,从队列中弹出项目并对其进行一些处理。如果你弹出了项目,但应用程序终止,你无法完成工作,这不是很糟糕吗?或者你是否有一些代码行,如果应用程序在执行过程中停止,那可能会很糟糕? Heroku不仅仅是猛拉应用程序上的电源线;它发送一个SIGTERM信号。Heroku还说(在上面的链接中)忽略这个信号是个坏主意。如果您得到的是“进程已退出,状态为143”,这意味着您没有监听该信号(无论如何,对于python)。 如果你没有在代码中做任何事情来监听这个信号,那么你就是在玩一个危险的游戏(除非你的应用程序在执行过程中的任何时候都可以被终止)。 对于python应用程序,如果你没有利用SIGTERM信号,你的应用程序会立即终止(一旦Heroku发送该信号),你会得到一个“进程退出,状态为143”。不好的。 然而,如果你利用了这个信号,那么你的应用程序在被终止之前有30秒的时间优雅地关闭,这是足够的时间来完成你正在做的任何工作。基本上停止做新的工作,如果你知道需要<30秒,或者将未完成的工作放回队列,然后退出,或者中断您所处的任何循环。您应该得到“进程已退出,状态为0”。这很好。 此外,如果你确实进入了信号,但在30秒内没有退出,那么你会得到一个“错误R12(退出超时)->至少有一个进程未能在SIGTERM的30秒内退出”,应用程序会被SIGKILL终止。您会得到一个“进程已退出,状态为137”。也不好。 在上面的链接中(在 停机 部分),他们在ruby中给出了一个如何利用该信号的例子。和 here 是python中的一个例子。 |
|
6
0
重新启动测功机,使测功机接收SIGTERM。使用此命令
然后
|
|
|
7
0
当我检查日志时:
它清楚地表明这是因为
所以应该有一种方法每隔N分钟检查一次我的URL,以防止它关闭
我发现了一个
|