Python 无法重新启动buildbot主机
我正在Windows7上运行Buildbot版本0.8.8 我有一个配置文件(Python 无法重新启动buildbot主机,python,twisted,buildbot,Python,Twisted,Buildbot,我正在Windows7上运行Buildbot版本0.8.8 我有一个配置文件(master.cfg),它使用一个小技巧创建所有的构建器。我从subversion读取了一个XML文件,其中列出了构建器的所有步骤。比如: <Builder name="BuilderA" description="Builds the A project"> <Command name="Clean">-v -t realclean -p my\\projA</Command&g
master.cfg
),它使用一个小技巧创建所有的构建器。我从subversion读取了一个XML文件,其中列出了构建器的所有步骤。比如:
<Builder name="BuilderA" description="Builds the A project">
<Command name="Clean">-v -t realclean -p my\\projA</Command>
<Command name="Release">-v -t release -p my\\projA</Command>
</Builder>
<Builder name="BuilderB" description="Builds the B project">
<Command name="Clean">-v -t realclean -p my\\projB</Command>
<Command name="Release">-v -t release -p my\\projB</Command>
</Builder>
我不知道这是什么
twisted.pid
文件,也不知道buildbot为什么要找这个?任何帮助或想法都将不胜感激。谢谢。到目前为止,您提供的信息还不能说明这一点
事实上,一切都错了
twistd.pid
是buildmaster的进程id文件。它的存在
指示buildmaster正在运行。它的缺失表明
buildmaster没有运行
重新启动buildmaster意味着先停止它,然后再启动它。停止
它使buildbot检查buildmaster的pid文件。如果没有pid
文件,然后它会通知您buildmaster未运行,并且
继续启动它
因此:
- 除非您知道buildmaster是 重新启动时正在运行,并观察此消息。你知道吗
- 该消息是无害的信息,除非buildmaster也无法启动。 你知道它不能启动吗
buildmaster以及您在哪个目录下运行它?我遇到了相同的问题。在windows上,似乎没有创建文件
twistd.pid
。我不确定该漏洞来自何处,但我向buildbot团队报告了该漏洞:
作为解决方法,我现在在my master.cfg中添加了:
import os
if not os.path.exists("twistd.pid"):
with open("twistd.pid", "w") as pidfile:
pidfile.write("{}".format(os.getpid()))
编辑:实际上,停止后PID文件似乎没有被删除。。。所以我尝试了更多:
else:
realpid = os.getpid()
filepid = 0
with open("twistd.pid", "r") as pidfile:
filepid = int(pidfile.read())
if filepid == 0 or filepid != realpid:
with open("twistd.pid", "w") as pidfile:
pidfile.write("{}".format(realpid))
它似乎可以工作,但如果在buildbot实际不运行时尝试停止它,则会出现错误,因为PID文件会生成错误的PID,它会试图终止它。嗨,Mike,谢谢您的输入。是,在我发出
start
命令后,buildmaster正在运行。我可以在html状态瀑布网页上验证它。所以buildmaster肯定在运行。其次,我在buildmaster应该运行的同一目录下运行了buildbot restart C:\master\u dir
。我检查了目录,但没有找到任何twisted.pid文件。除了之外的裸露是一种糟糕的风格,可能会掩盖其他一些错误情况。尝试更改代码以报告正在发生的实际错误,并向上游报告此错误处理代码,以便正确修复。@Jean-PaulCalderone我引用的代码是buildbot的包代码。这不是我写的东西。我引用它是为了让问题更清楚,并说明实际错误发生的地方。的确如此——但它仍然是应该修复的错误代码。:)在修复过程中,您可能会发现此故障的根本原因。
else:
realpid = os.getpid()
filepid = 0
with open("twistd.pid", "r") as pidfile:
filepid = int(pidfile.read())
if filepid == 0 or filepid != realpid:
with open("twistd.pid", "w") as pidfile:
pidfile.write("{}".format(realpid))