改进版重启java 程序,及配合ansible yml 批量执行

原先的lsof -i:port 方式重启java 程序经常会有些小问题,这里改进了新脚本,并且结合ansilbe 使用,直接上脚本和样例。

  1. restat-tm.sh

#!/bin/bash

JAVA_HOME="/usr/local/java/jdk1.8.0_25" ###jdk

APP_MAINCLASS="TM" ###TM.jar

APP_HOME="/home/java/tm" ####/home/java/tm/***

#java虚拟机启动参数

JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m  -Dfile.encoding=UTF-8  "

psid=0

##########################################checkpid()#################################

checkpid() {

javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`

if [ -n "$javaps" ]; then

psid=`echo $javaps | awk ‘{print $1}‘`

else

psid=0  ####[ $psid -ne 0 ]

fi

echo "checkpid:"+$psid

}

##########################################start ()#################################

start() {

checkpid

if [ $psid -ne 0 ]; then

echo "================================"

echo "warn: $APP_MAINCLASS already started! (pid=$psid)"

echo "================================"

else

echo -n "Starting $APP_MAINCLASS ..."

nohup $JAVA_HOME/bin/java $JAVA_OPTS -jar $APP_HOME/$APP_MAINCLASS.jar > /dev/null 2>&1 &

checkpid

if [ $psid -ne 0 ]; then

echo "(pid=$psid) [start OK]"

else

echo "[start Failed]"

fi

fi

}

##########################################stoppid()#################################

stop() {

checkpid

if [ $psid -ne 0 ]; then

echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "

kill   $psid

if [ $? -eq 0 ]; then

echo "[stop OK]"

else

echo "[stop Failed]"

fi

checkpid

if [ $psid -ne 0 ]; then

stop   ###验证重杀

fi

else

echo "================================"

echo "warn: $APP_MAINCLASS is not running"

echo "================================"

fi

}

##########################################status ()#################################

status() {

checkpid

if [ $psid -ne 0 ];  then

echo "$APP_MAINCLASS is running! (pid=$psid) and run time is :"

ps -p  $psid -o pid,etime,uid,gid

else

echo "$APP_MAINCLASS is not running"

fi

}

##########################################info)#################################

info() {

echo "System Information:"

echo "****************************"

echo `head -n 1 /etc/issue`

echo `uname -a`

echo

echo "JAVA_HOME=$JAVA_HOME"

echo `$JAVA_HOME/bin/java -version`

echo

echo "APP_HOME=$APP_HOME"

echo "APP_MAINCLASS=$APP_MAINCLASS"

echo "****************************"

}

##########################################op ()#################################

case "$1" in

‘start‘)

start

;;

‘stop‘)

stop

;;

‘restart‘)

stop

start

;;

‘status‘)

status

;;

‘info‘)

info

;;

*)

echo "Usage: $0 {start|stop|restart|status|info}"

exit 1

esac

exit 0

2.ansible play book 

cat jd-tm-new.yml

---

- hosts: jd-tm-java

sudo_user: java

sudo: no

tasks:

- name: bakckup  target.tar  /home/java/war-backup

shell: mv  -f /home/java/target.tar  /home/java/war-backup/

ignore_errors: True

- name: rm  old tm/*

shell: rm  -rf /home/java/tm/*

ignore_errors: True

- name:  stop tm  java

shell: /home/java/restart-tm.sh  stop

register: outMessg

- debug: var=outMessg.stdout_lines

ignore_errors: True

- name: Copy war  file to client

copy: src=/root/.jenkins/jobs/jd-tm/workspace/target.tar dest=/home/java

- name: sleep 5

shell:  sleep 5

- name: tar xvf target.tar

shell:  tar -xvf /home/java/target.tar

- name: mv  target.tar  tm ,porject name

shell:  mv -f  /home/java/target/*  /home/java/tm/

- name: start   tm  java

shell:  /home/java/restart-tm.sh  start

- shell: ps -eo pid,cmd,etime,stime | grep java

register: ps

- debug: var=ps.stdout_lines

3.执行样例:

时间: 2024-12-24 22:32:48

改进版重启java 程序,及配合ansible yml 批量执行的相关文章

将本地Java程序部署到linux服务器并执行

需求:将本地Java程序部署到linux服务器并执行,首先要将本地Java程序打成jar包,然后拷贝到服务器后运行java -jar xx.jar 问题:该程序本地运行正常,服务端运行报错找不到第三方包中的类 原因:本地打jar包时有错,未能正确引入第三方包 解决:本地通过fat jar插件来打包,方法如下 在Eclipse 下 java 应用程序打包 Mainfest.mf 格式 首先保证程序在Eclipse下的正常执行,然后方法如下: ( 写在最前面 做好的Eclipse打包 还是使用插件

修改Java程序的进程名

1.修改tomcat进程名字: 当同一个服务器上启动多个tomcat后,我们会在任务管理器中看见多个java.exe,当我们需要对某个tomcat进行监控时,却无法区分出该tomcat的进程,那么如何修改进程名呢? 可以使用端口号来区分不同的tomcat进程,使用netstat -nao | find "xxxx",xxxx是端口号,就可以找到所对应的进程.下面的方法可以直接修改tomcat的进程名为指定的名字,更便于辨认. 打开tomcat_home\bin\setclasspath

面向 Java 开发与测试人员的远程执行 Linux/UNIX 系统上任务的框架 -- sshxcu

软件开发与测试人员常常会在远程 Linux/UNIX 系统上执行命令或脚本,有时还会有批量执行任务的需求.常见的办法是通过本地工具(例如 Putty)连接远程计算机,输入命令执行,但是当遇到需要集成这些任务到代码或者开发.测试框架中时,往往就没有很好的解决方案了.sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用 Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能.sshxcute

[ jenkins ] git+jenkins+maven + ansible 部署java程序

1. 工具介绍 git:版本控制,一般都是托管到代码仓库的.如 github.coding.gitlab (本文以 coding 为例) jenkins:持续集成工具之一,也是最常用的工具,主要工作就是将代码从git仓库pull下来,通过maven打包,在部署到服务器上 maven:java 项目管理构建自动化工具,主要是将 java 源代码打包成 jar 程序 ansible:批量部署程序所使用的工具. 下面介绍的部署过程使用到了以上 4 个工具. 主机介绍: 实现思路: 2. 持续集成实例

shell脚本批量/单独启动、停止、重启java独立jar程序

本人最近半年使用阿里dubbo做开发,并在公司内部大力进行推广,将原来一个笨重且不易于维护的大项目切分成多个相对独立的java程序,好处是显而易见的,但是随着切分的独立运行程序包越来越多,程序的部署变成了一件非常头痛的问题,无耐之下,本人想到可否写一个shell脚本来批量/单独启动.停止.重启这些独立的java程序,之前没有写过shell脚本,研究二天后,终于将这个脚本写出来了,以后部署起来方便多了,废话不多说,直接贴上shell脚本,有需要的朋友可以根据自己项目修改前面的程序代码数组.程序名称

对Ansible二次开发来检查服务器的Java程序占用端口数量

一 应用场景描述 有这个么一个需求:对很多台服务器的Java程序所占用的端口数量与正常的值进行对比确认. 可以使用如下命令得到结果: netstat -tulnp|grep java|wc -l 但是服务器很多,每台手动去执行这条命令是不现实的.于是想到使用Ansible批量去执行,Ansible使用paramiko去ssh登录服务器执行命令,并使用mutilprocessing实现多进程ssh登录. 二 代码实现 如果直接使用Ansible去执行,不作任何处理的话.执行情况是这样的: # an

转载--编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)

阅读目录 建议16:易变业务使用脚本语言编写 建议17:慎用动态编译 建议18:避免instanceof非预期结果 建议19:断言绝对不是鸡肋 建议20:不要只替换一个类 回到顶部 建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它们都是在运行期解释执行的.为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示:

解决 Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的方法

Mac OS X 下基于 Java 的程序(如 IntelliJ IDEA.jEdit 等)会出现中文标点输入无效的问题,在中文输入法状态,可以输入中文字,但输入中文标点最后上去的是英文标点.查阅了相关资料,原来这是 Java 自己的 bug.从 Java 8u51 版本开始就出现了这个 bug,一直到现在最新的 Java 8u72 仍然如此,但是老版本 Java 8u45 是没有这个问题的.所以,可以采取变通的方法,在 Mac OS X 上同时装一个老版本的 JDK 8u45,不会影响已经安装

Java程序员面试题集(71-85)

Java程序员面试题集(71-85) 摘要:这一部分主要包括了UML(统一建模语言).面向对象的设计原则(六原则一法则).GoF设计模式.企业级设计模式.JDBC(Java数据库连接).XML(可扩展标记语言)等知识. 71.UML是什么?UML中有哪些图? 答:UML是统一建模语言(Unified Modeling Language)的缩写,它发表于1997年,综合了当时已经存在的面向对象的建模语言.方法和过程,是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化