Jenkins 如何调用shell脚本来启动后端Java进程?
在完成Jenkins任务后,我使用Jenkins的post-condition配置部分执行Linux shell脚本 此Linux shell脚本希望在后端启动备用服务,并且不能导致Jenkins暂停 我试图使用“nohup+&”等,但它不起作用Jenkins 如何调用shell脚本来启动后端Java进程?,jenkins,Jenkins,在完成Jenkins任务后,我使用Jenkins的post-condition配置部分执行Linux shell脚本 此Linux shell脚本希望在后端启动备用服务,并且不能导致Jenkins暂停 我试图使用“nohup+&”等,但它不起作用 有什么好办法吗?詹金斯可能正在等待一些管道关闭。您的后台进程继承了一些文件描述符,并在运行期间保持这些描述符的打开状态 如果幸运的话,唯一的文件描述符是0、1和2(标准的)。您可能希望使用lsof-p PID检查后台进程的文件描述符,其中PID是后台进
有什么好办法吗?詹金斯可能正在等待一些管道关闭。您的后台进程继承了一些文件描述符,并在运行期间保持这些描述符的打开状态 如果幸运的话,唯一的文件描述符是0、1和2(标准的)。您可能希望使用
lsof-p PID
检查后台进程的文件描述符,其中PID是后台进程的进程id
您应该确保所有这些文件描述符(输入和输出)都被重定向到后台进程,因此请从以下内容开始:
nohup daemon </dev/null >/dev/null 2>&1 &
nohup守护程序/dev/null 2>&1&
请随意将输出定向到除/dev/null
以外的文件,但请确保保持重定向的顺序。订单很重要
如果您计划从Jenkins作业启动后台进程,请注意Jenkins将在构建结束时终止后台进程。请参阅如何防止这种情况。我在运行Jenkins的shell脚本作为后台进程时遇到了类似的问题。我使用以下命令修复了它:
BUILD_ID=dontKillMe nohup ./start-fitnesse.sh &
请确保stderr也被重定向,即
nohup script.sh 2>&1>/dev/null
您仍然可以澄清问题的具体原因吗?你的意思是直到服务退出,构建才会完成吗?您希望构建完成并让服务在后台运行吗?对于@sti,是的,是的。@sti我有完全相同的问题,我尝试使用“nohup java-jar whatever&”启动后台jar服务,但Jenkins作业在jar退出之前不会退出,这是永远不会发生的,因为它是一个一直运行的后台服务。。。你有解决这个问题的好办法吗?