jenkins - 如何调用shell脚本来启动后端Java进程?

标签 jenkins

完成 Jenkins 任务后,我使用 Jenkins 的后置条件配置部分执行 Linux shell 脚本。

这个 Linux shell 脚本想要在后端启动备用服务,并且不能导致 Jenkins 暂停。

我尝试使用“nohup+&”等,但不起作用。

有什么好的方法吗?

最佳答案

Jenkins 可能正在等待一些管道关闭。您的后台进程继承了一些文件描述符,并在运行期间将它们保持打开状态。

如果幸运的话,唯一的文件描述符是 0、1 和 2(标准的)。您可能需要使用 lsof -p PID 检查后台进程的文件描述符,其中 PID是后台进程的进程id。

您应该确保所有这些文件描述符(输入和输出)都重定向到后台进程,因此以如下方式启动:

nohup daemon </dev/null >/dev/null 2>&1 &

您可以随意将输出定向到 /dev/null 以外的文件,但请确保保持重定向的顺序。顺序很重要。

如果您计划从 Jenkins 作业启动后台进程,请注意 Jenkins 将在构建结束时终止后台进程。请参阅https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller关于如何防止这种情况。

关于jenkins - 如何调用shell脚本来启动后端Java进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28319984/

相关文章:

docker - jenkins管道docker在docker代理上构建

jenkins - 由 package.json 为 TestCafe 安装的 NPM browserstack 别名无法识别

asp.net - 使用 MSBUILD 和/或 MSDEPLOY (.NET 3.5) 从命令行进行部署

jenkins - 如何使用 Jenkins 在 GlassFish 4 服务器中部署 war 文件

node.js - 从 Jenkins 运行 Protractor

jenkins - 列出 Jenkins 上作业正在运行的当前构建总数

jenkins - Jenkins 共享库中的全局变量

Jenkins :让一个工作等待另一个工作正在运行

docker - 通过 Docker 在 localhost 上使用 SSL 运行 jenkins

jenkins - 在 Jenkins 中对参数组进行分组和装饰