检查用twistd启动的Twisted服务器是否成功启动

3 投票
1 回答
769 浏览
提问于 2025-04-17 03:11

我需要一种可靠的方法来检查通过twistd(和一个TAC文件)启动的基于Twisted的服务器是否成功启动。它可能会因为某些网络设置错误而启动失败。由于我无法访问twistd的日志(因为它被记录到/dev/null,这样做是因为我不需要twistd产生的那些杂乱的日志),我需要在一个包装twistd调用的启动脚本中找出服务器是否成功启动。

这个启动脚本是一个像这样的Bash脚本:

#!/usr/bin/bash
twistd \
  --pidfile "myservice.pid" \
  --logfile "/dev/null" \
  --python \
  myservice.tac

我在网上找到的都是一些使用ps之类的黑科技。但我不喜欢这样的做法,因为我觉得它不可靠。

所以我在想有没有办法访问Twisted的内部,获取所有当前正在运行的Twisted应用程序?这样我就可以查询当前运行的应用程序,看看我的Twisted应用程序(我在TAC文件中给它起的名字)是否在运行。

我也在考虑不使用twistd可执行文件,而是实现一个基于Python的启动脚本,里面包含twistd的内容,就像这个问题的回答所提供的那样,但我不知道这样是否能帮助我获取服务器的运行状态。

所以我的问题就是:有没有一种可靠且不麻烦的方法来判断一个通过twistd启动的Twisted服务器是否成功启动,尤其是在禁用twistd日志的情况下?

1 个回答

5

你正在明确指定一个PID文件。twistd会把它的PID写入这个文件。你可以检查系统,看看是否有一个进程的PID和这个文件里的相同。

你也可以重新启用日志记录,使用一个自定义的日志观察者,这个观察者只记录你的启动事件,其他的日志信息都不记录。这样你就可以关注日志,查看启动事件。

还有一种可能性是给你的应用添加一个额外的服务器,这个服务器可以显示你提到的内部信息。然后你可以尝试连接到这个服务器,看看你想要查看的内容(仅仅是服务器在运行就已经是进程正常启动的一个好迹象了)。如果你把它做成一个“人孔”服务器,那么你就可以执行任意的Python代码,这样就能检查你想要的任何进程状态。

你也可以让你的应用代码写一个额外的状态文件,明确表示启动成功。在启动应用之前确保删除这个文件,这样你就能很好地判断成功与否。

撰写回答