我在Jenkins蚂蚁执行插件中有一个蚂蚁任务,作为构建后步骤,在我们的一个服务器中远程运行shell脚本。shell脚本在后台启动一个java进程。当我直接在服务器上执行shell脚本时,它会在后台启动java进程并退出。当我通过sshexec
任务从Jenkins运行它时,shell脚本运行,但它永远不会出来,Jenkins Build等待。
后来,当我将timeout
属性添加到sshexec
时,它会在给定毫秒数后超时,但Jenkins构建显示为失败。如何使ssheec任务从shell脚本执行中清晰地显示出来?
这是我的ssheexec
任务
<sshexec host="${deploy.host}" username="${deploy.username}" password="${deploy.password}" command=". /etc/profile; cd ${deploy.path}; sh start.sh i1" trust="true" timeout="10000" />
start.sh文件如下:
nohup java -Xms512m -Xmx1024m -cp calculation.jar com.tes.StartCalculation $1 &
echo $! > calculation-$1-java.pid
看起来,ssh执行的作业没有完全守护进程。在许多情况下,从nohup
开始是不够的。
请参阅与之相关的讨论(在不同的上下文中)
问题是你没有关闭你的文件描述符,当你把一些东西放到背景中。的,当你在一个Shell,但是当您想断开连接并留下一个进程运行时,需要进程断开与shell的连接。
…
如果有人写了一个没有正确分离的幼稚的服务脚本在终端上,我想知道那个脚本是什么时候出现的在部署中使用- SCM更改将启用破坏性更改被快速识别
隐藏问题以使不正确的代码存在是错误的发布到生产中-如果我第一次知道,我不会高兴的是一个生产系统管理员抱怨的。
如果是同样的问题,您需要守护脚本