zoukankan      html  css  js  c++  java
  • 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

     

     

    【一位十年码农的碎碎念,扫码关注获取更多精彩内容】

     

    创文章,转载请注明出处,更多文章请关注公众号。

    成长的乐趣,在于分享!
    大龄程序员,一路走来,感慨颇多。闲暇时写写字,希望能给同行人一点帮助。
    本文版权归作者growithus和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    JAVA日常之三
    java将字符串存入oracle的Blob中
    java连接oracle数据库
    JAVA日常之二
    JAVA日常之一
    linux日常命令之三
    linux日常命令之二
    linux日常命令之一
    Python之路【第四十篇】:django日更
    Python之路【第三十九篇】:django日更
  • 原文地址:https://www.cnblogs.com/growithus/p/11012236.html
Copyright © 2011-2022 走看看