完成 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/