【发布时间】:2016-04-25 18:54:44
【问题描述】:
我想找到一种方法来查找 Jenkins 作业的进程 ID,以便在作业挂起时终止该进程。 Jenkins 实例位于 Ubuntu 上。有时,我们无法通过 Jenkins 界面停止工作。如果我运行包含简单 shell 脚本的 Jenkins 作业,我可以通过终止进程 id 来停止作业,在该脚本中我手动收集进程 id,例如:
#!/bin/bash
echo "Process ID: $$"
for i in {1..10000}
do
sleep 10;
echo "Welcome $i times"
done
在命令外壳中,我可以运行sudo kill -9 [process id],它成功地终止了工作。
问题是,我们的大多数工作都有多个构建步骤,并且我们有多个项目在此服务器上运行。我们的许多构建步骤是 shell 脚本、windows 批处理文件,其中一些是 ant 脚本。我想知道如何找到 Jenkins 作业的进程 ID,它是所有构建步骤的父进程。截至目前,我必须等到所有其他构建完成并重新启动服务器。感谢您的帮助!
【问题讨论】:
-
嗨@gXg,感谢您的帮助。我运行了
ps -ef| grep jenkins,它帮助我找到了正在运行的 Jenkins 进程。问题在于它显示了所有正在运行的 Jenkins 进程。这并没有按正在运行的作业的名称列出它们,在我的例子中,它是一个自动生成的 shell 脚本。经过进一步调查,我确定杀死父进程杀死了 Jenkins,因此我可能需要确定另一种方法来执行此操作。 -
如果我可以在执行过程中将 BUILD_ID 和 JOB_NAME 附加到自动生成的 shell 脚本名称中,那么我想我应该能够找到确切的进程并杀死它。我不确定如何做到这一点。 (例如,这是我希望能够搜索并杀死的进程信息:jenkins 3053 1831 0 10:59 ? 00:00:00 /bin/bash /tmp/hudson998677067093515957.sh )