1

几天前,我发现我的 webapp 在 tornadoweb 框架之上编写并不会通过 upstart 停止或重新启动。新贵只是挂起,不做任何事情。

我调查了这个问题,发现新贵收到了错误的 PID,所以它只能运行一次我的 webapp 守护程序,不能做任何其他事情。

Strace 显示我的守护进程进行了 4 次(!)clone() 调用,而不是 2 次。

一周前一切都很好,新贵完全正确地管理了 webapp。

操作系统是 Ubuntu 10.04.03 LTS(就像几周前一样)。

您有任何解决方法的想法吗?

PS:我知道“expect fork|daemon”指令,它没有任何改变;)

4

2 回答 2

1

对不起,我的沉默,请。

对该问题的调查以关于 uuid python 库的知识结束,该库向我的守护程序添加了 2 个分支。我摆脱了这个库,龙卷风守护程序现在可以正常工作。

替代答案是 supervisord,它可以将任何控制台工具作为不能自行守护进程的守护进程运行。

于 2012-05-31T16:21:36.650 回答
0

有两种常用的解决方案

第一个是让您的应用程序诚实地报告它的 pid。如果您可以强制您的应用程序将实际的 pid 写入 pidfile,那么您可以从那里获取它的 pid。

第二个稍微复杂一些。您可以为脚本调用添加特定的环境变量。如果分叉不清除环境,则此环境变量将保留在所有分叉中,并且您可以通过解析/proc/*/environ文件找到所有进程。

应该有更简单的解决方案来通过他们的环境查找进程,但我不确定。

于 2011-12-15T07:41:00.137 回答