Jenkins构建部署jar/war后,服务无法在后台持续运行的解决方案
jenkins中自动构建helpcenter.jar文件,然后以在server上以shell脚本的形式启动jar服务。jenkins构建后,手动执行sh脚本,服务启动异常。但jenkins结合shell一起使用的话,jenkins的console中显示正常启动,但server中服务并未启动。
排错的过程总是异常的艰辛,你懂的。
shell脚本如下:
#!/bin/sh
#defined
export JAVA_HOME=/usr/java/jdk1.7.0_79
MID=`ps -ef |grep java |grep helpcenter |awk '{print $2}'`
echo $MID
echo "kill helpcenter process"
if ["$MID" = ""]
then
echo "no helpcenter running"
else
echo "helpcenter running "
kill -9 $MID
fi
echo "copy the lasteset msgcenter jar file"
cp -rf /root/.jenkins/workspace/helpcenter/helpcenter/target/helpcenter.jar /home/tomcat/msgcenter
echo "start msgcenter jar file"
#get int to jar location
cd /home/tomcat/msgcenter
nohup java -Xms512m -Xmx1024m -jar helpcenter.jar &
echo "stared helpcenter jar file"
细看job console最下面一行信息显示:
Process leaked file descriptors. See http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build for more information
大概意思是jenkins的job有构建结束后,会认为所有任务正常结束,但shell脚本会启动一个进程,job会认为其未结束,而将其kill掉,导致的现象就是刚启动的进程又被kill掉了。
资料显示可通过daemonize工具,将程序作为实现良好的daemon进程运行以避免这个问题。在linux Server中安装daemonize工具,安装过程如下:
$ git clone http://github.com/bmc/daemonize.git
$ ./configure
$ make
$ make install
安装结束。
在jenkins中的shell配置的地方,添加最后一行命令行即可。
#!/bin/bash
cd /home/autoshell/
echo "------------------------------------>>>begin sh helpcenter-restart.sh"
sh msgcener-restart.sh
echo "------------------------------------>>>good ,start the helpcenter ........"
daemonize -E BUILD_ID=dontKillcenter /home/autoshell/helpcenter-restart.sh
重新启动jenkins job,测试是否正常使用。
参考资料:
http://software.clapper.org/daemonize/
http://alanland.iteye.com/blog/2047244
http://www.cnblogs.com/qcly/p/3219508.html
https://my.oschina.net/u/147181/blog/312599

【一位十年码农的碎碎念,扫码关注获取更多精彩内容】
原创文章,转载请注明出处,更多文章请关注公众号。
Jenkins构建部署jar/war后,服务无法在后台持续运行的解决方案的更多相关文章
- jenkins 构建部署时tomcat7 内存溢出解决方案
在使用jenkins构建部署时一直出现tomcat7内存溢出 WARNING: Unexpected node monitoring termination: Clock Difference jav ...
- nodejs服务后台持续运行三种方法
一.利用 forever forever是一个nodejs守护进程,完全由命令行操控.forever会监控nodejs服务,并在服务挂掉后进行重启. 1.安装 forever npm install ...
- Swift - 让程序挂起后,能在后台继续运行任务
1,程序的挂起和退出 由于iOS设备资源有限.当用户点击了home键,或者另一个应用程序启动了.那么原先那个程序便进入后台被挂起,不是退出,只是停止执行代码,同时它的内存被锁定.当应用程序恢复时,它会 ...
- 【iOS】swift 让程序挂起后,能在后台继续运行任务
1,程序的挂起和退出 由于iOS设备资源有限.当用户点击了home键,或者另一个应用程序启动了.那么原先那个程序便进入后台被挂起,不是退出,只是停止执行代码,同时它的内存被锁定.当应用程序恢复时,它会 ...
- android保持服务不休眠(持续运行)以及唤醒屏幕的方法
假设有这样一个应用场景,一个服务一直在默默的工作(比如即时地获取服务器的消息),即使在屏幕已经因为长时间无操作而关闭,或者用户按了电源键让屏幕关闭,手机进入休眠状态,他必须依然在工作中.一旦从服务器获 ...
- jenkins使用小技巧:jenkins构建出来的war/jar包如何带上SVN号?
在实际使用过程中,一般会这样比如说打出来的包是 mypackage.jar, 但是每次打出来都是固定的 mypackage.jar如何来区分和上一个包的区别呢? 一般来说,会把打出来的包带上个 svn ...
- jenkins自动化部署jar包(2)
1.自动化部署流程: svn代码-----jenkins------linux运行 环境: 我这里为了测试:svn,和linux放在阿里云上面.jenkins放在本地windos电脑上运行的 2.下载 ...
- Jenkins构建部署Maven项目
1 创建新项目 2 构建maven项目 3 配置 3.1 源代码管理 svn 用户名,密码 4 配置maven打包 配置SSH 保存之后 立即构建 执行成功
- jenkins自动化部署项目6 --STMP服务发送邮件配置
[系统管理]-[系统设置]里 1.系统管理员邮件地址:和后面SMTP配置认证的邮箱要一致,即发件箱 --------切记 2.配置SMTP认证的前提是需要在sohu搜狐邮箱开通SMTP/POP3, ...
随机推荐
- C# API 获取系统DPI缩放倍数跟分辨率大小
原文:C# API 获取系统DPI缩放倍数跟分辨率大小 using System; using System.Drawing; using System.Runtime.InteropServices ...
- Socket 专题
Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...
- huawei 通过BGP的团体属性进行路由控制
网络拓扑 XRV1的配置: =========================================================================== # sysname ...
- 微信小程序把玩(二十七)audio组件
原文:微信小程序把玩(二十七)audio组件 音频播放已经封装的很好!只需配合属性设置即可! (method和data配合使用) 主要属性: wxml <audio action="{ ...
- EF CodeFirst数据迁移与防数据库删除
1 开启migrations功能 enable-migrations -force 2 添加迁移版本 add-migration 名称后缀 我们每次修改实体后,都应该使用这个add-migration ...
- WCSTOMBS 函数不支持中文件的解决方法(设置代码页)
代码页没有进行设置.需要调用locale.h 中定义的一个函数设置默认的代码页 _tsetlocale(LC_ALL,_T(""));//设置代码页 wcstombs(sendB ...
- Windows下配置QT OpenCV
OpenCV-Study:Windows下配置OpenCV 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:XP OpenCV版本:2.4 ...
- TopFreeTheme精选免费模板【20130626】
有一段时间没有发布的模板了,相信很多喜欢新模板的朋友有点焦急了!还好,今天我今天整理了13个最新的模板,主要是WordPress的,另外3个是关于Joomla的模板,他们分别是游戏主题.俱乐部主题以及 ...
- C语言实现常用排序算法——插入排序
插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历:内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历:当发现有大于待插入元素的元素,则 ...
- ChannelPipeline----贯穿io事件处理的大动脉
ChannelPipeline贯穿io事件处理的大动脉 上一篇,我们分析了NioEventLoop及其相关类的主干逻辑代码,我们知道netty采用线程封闭的方式来避免多线程之间的资源竞争,最大限度地减 ...