博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jenkins启动守护进程后台持续运行
阅读量:7176 次
发布时间:2019-06-29

本文共 1653 字,大约阅读时间需要 5 分钟。

hot3.png

<p>在使用jenkins的时候,我们可能有这样的需求,希望jenkins启动的进程在后台持续运行,不阻塞jenkins的构建。1.136版本之前的jenkins不满足这种需求,1.136之后的版本支持。</p>

<h2>为什么jenkins的进程是阻塞的?</h2>

<p>jenkins主进程和它所启动的子进程通过stdin、stdout、stderr这三个管道相互联系。也因为这样,jenkins可以打印所有进程的日志。子进程可能打印海量的日志,然后结束,但是jenkins主进程要保证所有的子进程通道关闭后,才能认为本次build结束。jenkins只有等到了EOF,才会结束。</p>

<p>一个进程结束后(无论什么原因),操作系统就会关闭这个进程相关的文件描述符。所以即使进程没有关闭stdin、stderr,jenkins也会收到EOF。</p>

<p>主进程开启子进程,子进程会继承主进程所有的文件描述符,包括stdin、stderr通道。如果子进程需要持续运行(守护进程)。一旦主进程忘记关闭子进程,那么jenkins即使在主进程结束后,也不会收到EOF,因为子进程还保留着所有的文件描述符。</p>

<p>一个正常的守护进程会关闭它所有的文件描述符,来避免上述情况。但是有时候,我们就是希望jenkins开启子进程持续运行。</p>

<h2>解决办法</h2>

<h3>unix</h3>

<p>unix中使用<code>daemonize</code>命令,如果机器上没有此命令,可以安装下<a href="http://software.clapper.org/daemonize/">http://software.clapper.org/daemonize/</a>。</p>

<pre><code>daemonize -E BUILD_ID=dontKillMe -o some.log -c /home/User/victor /home/User/victor/test.sh </code></pre>

<p>-o :指定日志文件,-c :命令执行前切换到该路径,最后是要执行脚本的绝对路径。</p>

<h2>windows</h2>

<p>windows中可以使用at和SCHTASKS命令来实现后台运行。<br/> 如果jenkins使用的是ant构建,增加下面的代码即可(执行bat脚本):</p>

<pre><code>&lt;scriptdef name="get-next-minute" language="beanshell"&gt; &lt;attribute name="property" /&gt; date = new java.text.SimpleDateFormat("HH:mm").format(new Date(System.currentTimeMillis() + 60000)); project.setProperty(attributes.get("property"), date); &lt;/scriptdef&gt; &lt;get-next-minute property="next-minute" /&gt; &lt;exec executable="at"&gt; &lt;arg value="${next-minute}" /&gt; &lt;arg value="/interactive" /&gt; &lt;arg value="${jboss.home}\bin\run.bat" /&gt; &lt;/exec&gt; </code></pre>

<p>使用ant构建,执行js脚本:</p>

<a href="http://www.yeetrack.com/?p=965">继续阅读-></a>

转载于:https://my.oschina.net/u/147181/blog/312599

你可能感兴趣的文章
java集合框架初探-迭代器
查看>>
CCS使用TIPS
查看>>
spring cloud:zipkin
查看>>
Python实现栈
查看>>
Android开机启动流程初探
查看>>
QString与中文,QString与std::wstring的相互转换(使用fromStdWString和u8关键字)(转)...
查看>>
REST和SOAP
查看>>
linux 常用命令
查看>>
微信支付报错:app没有获取微信支付权限
查看>>
rest-framework框架的基本组件
查看>>
javascript:void(0)和onclick=fn(this)
查看>>
002|也谈10000小时 - 《硅谷来信》
查看>>
数论 - SGU 107 987654321 problem
查看>>
Java集合源码分析(六)TreeSet<E>
查看>>
Linux系统启动管理 系统启动流程
查看>>
vim中设置Python自动补全
查看>>
单例模式
查看>>
安装nfs服务器
查看>>
DefaultWebSessionManager DefaultSessionManager DefaultWebSecurityManager SessionsSecurityManager
查看>>
深入解析“硬链接”与“软链接”
查看>>