`

启动和停止Java应用程序的Shell脚本

阅读更多
转载:http://blog.csdn.net/jadyer/article/details/7960802


#!/bin/sh 
#------------------------------------------------------------------------------------------------------------- 
#实际使用中,需注意以下两点 
#1)直接在Linux/UNIX上面创建并编写shell脚本 
#  这是因为Windows下编写的*.sh文档格式和编码,是Linux/UNIX所不能完全承认的 
#  最直接的体现就是使用过程中会遇到很多似是而非的错误,这曾经搞疯了一大片人 
#2)编写完*.sh之后,记得[chmod 755 *.sh],否则会提示无法执行or没有权限执行等等 
#------------------------------------------------------------------------------------------------------------- 
#JDK路径 
#JAVA_HOME="/usr/java/jdk1.6.0_31" 
 
#JVM启动参数 
#-server:一定要作为第一个参数,在多个CPU时性能佳 
#-Xloggc:记录GC日志,这里建议写成绝对路径,如此便可在任意目录下执行该shell脚本 
#JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m" 
JAVA_OPTS="-Duser.timezone=GMT+8 -server -Xms512m -Xmx512m -Xloggc:/app/code/CucPayTradePortalLog/gc.log" 
 
#Java程序日志所在的目录 
APP_LOG=/app/code/CucPayTradePortalLog 
 
#Java程序主体所在的目录,即classes的上一级目录 
APP_HOME=/app/code/CucPayTradePortal 
 
#Java主程序,即main(String[] args)方法类 
APP_MAIN=com.cucpay.tradeportal.MainApp 
 
#classpath参数,包括指定lib目录下的所有jar 
CLASSPATH=$APP_HOME/classes 
 
for tradePortalJar in "$APP_HOME"/lib/*.jar 
do 
   CLASSPATH="$CLASSPATH":"$tradePortalJar" 
done 
 
#------------------------------------------------------------------------------------------------------------- 
#getTradeProtalPID()-->获取Java应用的PID 
#说明:通过JDK自带的JPS命令及grep命令,准确查找Java应用的PID 
#其中:[jps -l]表示显示Java主程序的完整包路径 
#     awk命令可以分割出PID($1部分)及Java主程序名称($2部分) 
#例子:[$JAVA_HOME/bin/jps -l | grep $APP_MAIN]-->>[5775 com.cucpay.tradeportal.MainApp] 
#另外:用这个命令也可以直接取到程序的PID-->>[ps aux|grep java|grep $APP_MAIN|grep -v grep|awk '{print $2}'] 
#------------------------------------------------------------------------------------------------------------- 
#初始化全局变量tradePortalPID,用于标识交易前置系统的PID,0表示未启动 
tradePortalPID=0 
  
getTradeProtalPID(){ 
    javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN` 
    if [ -n "$javaps" ]; then 
        tradePortalPID=`echo $javaps | awk '{print $1}'` 
    else 
        tradePortalPID=0 
    fi 

 
#------------------------------------------------------------------------------------------------------------- 
#startup()-->启动Java应用程序 
#步骤:1)调用getTradeProtalPID()函数,刷新$tradePortalPID全局变量 
#     2)若程序已经启动($tradePortalPID不等于0),则提示程序已启动 
#     3)若程序未被启动,则执行启动命令 
#     4)启动命令执行后,再次调用getTradeProtalPID()函数 
#     5)若步骤4执行后,程序的PID不等于0,则打印[Success],否则打印[Failed] 
#注意:[echo -n]表示打印字符后,不换行 
#注意:[nohup command > /path/nohup.log &]是将作业输出到nohup.log,否则它会输出到该脚本目录下的nohup.out中 
#------------------------------------------------------------------------------------------------------------- 
startup(){ 
    getTradeProtalPID 
    echo "======================================================================================" 
    if [ $tradePortalPID -ne 0 ]; then 
        echo "$APP_MAIN already started(PID=$tradePortalPID)" 
        echo "======================================================================================" 
    else 
        echo -n "Starting $APP_MAIN" 
        nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN > $APP_LOG/nohup.log & 
        getTradeProtalPID 
        if [ $tradePortalPID -ne 0 ]; then 
            echo "(PID=$tradePortalPID)...[Success]" 
            echo "======================================================================================" 
        else 
            echo "[Failed]" 
            echo "======================================================================================" 
        fi 
    fi 

 
#------------------------------------------------------------------------------------------------------------- 
#shutdown()-->停止Java应用程序 
#步骤:1)调用getTradeProtalPID()函数,刷新$tradePortalPID全局变量 
#     2)若程序已经启动($tradePortalPID不等于0),则开始执行停止程序操作,否则提示程序未运行 
#     3)使用[kill -9 PID]命令强制杀掉进程 
#     4)使用[$?]获取上一句命令的返回值,若其为0,表示程序已停止运行,则打印[Success],反之则打印[Failed] 
#     5)为防止Java程序被启动多次,这里增加了反复检查程序进程的功能,通过递归调用shutdown()函数的方式,反复kill 
#注意:Shell编程中,[$?]表示上一句命令或者上一个函数的返回值 
#------------------------------------------------------------------------------------------------------------- 
shutdown(){ 
    getTradeProtalPID 
    echo "======================================================================================" 
    if [ $tradePortalPID -ne 0 ]; then 
        echo -n "Stopping $APP_MAIN(PID=$tradePortalPID)..." 
        kill -9 $tradePortalPID 
        if [ $? -eq 0 ]; then 
            echo "[Success]" 
            echo "======================================================================================" 
        else 
            echo "[Failed]" 
            echo "======================================================================================" 
        fi 
        getTradeProtalPID 
        if [ $tradePortalPID -ne 0 ]; then 
            shutdown 
        fi 
    else 
        echo "$APP_MAIN is not running" 
        echo "======================================================================================" 
    fi 

 
#------------------------------------------------------------------------------------------------------------- 
#getServerStatus()-->检查程序运行状态 
#------------------------------------------------------------------------------------------------------------- 
getServerStatus(){ 
    getTradeProtalPID 
    echo "======================================================================================" 
    if [ $tradePortalPID -ne 0 ]; then 
        echo "$APP_MAIN is running(PID=$tradePortalPID)" 
        echo "======================================================================================" 
    else 
        echo "$APP_MAIN is not running" 
        echo "======================================================================================" 
    fi 


下面是我整理的用于启动Java应用程序的startup.sh(可单独使用)
[ruby] view plaincopyprint?
#!/bin/sh 
#------------------------------------------------------------------------------------------------------------- 
#该脚本的使用方式为-->[sh startup.sh] 
#该脚本可在服务器上的任意目录下执行,不会影响到日志的输出位置等 
#------------------------------------------------------------------------------------------------------------- 
#JAVA_HOME="/usr/java/jdk1.6.0_31" 
JAVA_OPTS="-Duser.timezone=GMT+8 -server -Xms2048m -Xmx2048m -Xloggc:/app/code/CucPayTradePortalLog/gc.log" 
APP_LOG=/app/code/CucPayTradePortalLog 
APP_HOME=/app/code/CucPayTradePortal 
APP_MAIN=com.cucpay.tradeportal.MainApp 
CLASSPATH=$APP_HOME/classes 
for tradePortalJar in "$APP_HOME"/lib/*.jar; 
do 
   CLASSPATH="$CLASSPATH":"$tradePortalJar" 
done 
 
tradePortalPID=0 
 
getTradeProtalPID(){ 
    javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN` 
    if [ -n "$javaps" ]; then 
        tradePortalPID=`echo $javaps | awk '{print $1}'` 
    else 
        tradePortalPID=0 
    fi 

 
startup(){ 
    getTradeProtalPID 
    echo "================================================================================================================" 
    if [ $tradePortalPID -ne 0 ]; then 
        echo "$APP_MAIN already started(PID=$tradePortalPID)" 
        echo "================================================================================================================" 
    else 
        echo -n "Starting $APP_MAIN" 
        nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAIN > $APP_LOG/nohup.log & 
        getTradeProtalPID 
        if [ $tradePortalPID -ne 0 ]; then 
            echo "(PID=$tradePortalPID)...[Success]" 
            echo "================================================================================================================" 
        else 
            echo "[Failed]" 
            echo "================================================================================================================" 
        fi 
    fi 

 
startup 

下面是我整理的用于停止Java应用程序的shutdown.sh(可单独使用)
[ruby] view plaincopyprint?
#!/bin/sh 
APP_MAIN=com.cucpay.tradeportal.MainApp 
 
tradePortalPID=0 
  
getTradeProtalPID(){ 
    javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN` 
    if [ -n "$javaps" ]; then 
        tradePortalPID=`echo $javaps | awk '{print $1}'` 
    else 
        tradePortalPID=0 
    fi 

 
shutdown(){ 
    getTradeProtalPID 
    echo "================================================================================================================" 
    if [ $tradePortalPID -ne 0 ]; then 
        echo -n "Stopping $APP_MAIN(PID=$tradePortalPID)..." 
        kill -9 $tradePortalPID 
        if [ $? -eq 0 ]; then 
            echo "[Success]" 
            echo "================================================================================================================" 
        else 
            echo "[Failed]" 
            echo "================================================================================================================" 
        fi 
        getTradeProtalPID 
        if [ $tradePortalPID -ne 0 ]; then 
            shutdown 
        fi 
    else 
        echo "$APP_MAIN is not running" 
        echo "================================================================================================================" 
    fi 

 
shutdown 

最后是我整理的用于查看Java应用程序运行状态的serverStatus.sh(可单独使用)
[ruby] view plaincopyprint?
#!/bin/sh 
APP_MAIN=com.cucpay.tradeportal.MainApp 
 
tradePortalPID=0 
 
getTradeProtalPID(){ 
    javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN` 
    if [ -n "$javaps" ]; then 
        tradePortalPID=`echo $javaps | awk '{print $1}'` 
    else 
        tradePortalPID=0 
    fi 

 
getServerStatus(){ 
    getTradeProtalPID 
    echo "================================================================================================================" 
    if [ $tradePortalPID -ne 0 ]; then 
        echo "$APP_MAIN is running(PID=$tradePortalPID)" 
        echo "================================================================================================================" 
    else 
        echo "$APP_MAIN is not running" 
        echo "================================================================================================================" 
    fi 

 
getServerStatus 
分享到:
评论

相关推荐

    启动停止java服务的shell脚本

    本文将详细介绍如何使用Shell脚本来启动和停止Java服务,适用于包括SpringBoot在内的各种Java应用程序。 首先,让我们理解什么是Shell脚本。Shell脚本是Linux或Unix操作系统中的批处理程序,由一系列命令组成,可以...

    Shell脚本通过Java class文件启停Java程序源码(脚本及源码)

    在开发过程中经常会员到在Linux环境中使用Shell脚本启动和停止java程序的情况,常用的java -jar命令只能运行jar文件,有很多不方便的地方,一旦代码修改就需要重新编辑打包,其实还有很多其他的方式,这个资源中包含...

    Linux下启动和停止jar包运行的脚本

    本文将深入解析如何利用shell脚本来控制Java应用程序的启动和停止,基于提供的“startTest.sh”和“stopTest.sh”脚本,详细阐述其工作原理及关键知识点。 ### 启动脚本(startTest.sh) #### 脚本详解 ```sh #!/...

    Shell脚本启动和停止springboot的jar包

    在本场景中,我们有两个文件——`startup.sh`和`shutdown.sh`,它们是用于启动和停止Spring Boot应用的Shell脚本,其中还涉及到内存配置。 首先,让我们深入理解`startup.sh`脚本。这个脚本的主要目标是启动一个...

    java程序产品包模板-内置linux和Windows通用shell启动停止脚本(无需系统安装Java运行环境).zip

    该压缩包文件“java程序产品包模板-内置linux和Windows通用shell启动停止脚本(无需系统安装Java运行环境).zip”提供了一套适用于Java程序的通用打包方案,特别强调了其能够在Linux和Windows操作系统上无缝运行,且不...

    Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法.zip

    在Linux环境中,管理和部署SpringBoot应用通常涉及到自动化脚本,特别是使用Shell脚本来启动和停止应用程序。本主题将深入探讨如何编写这样的脚本,以便高效地处理SpringBoot的jar程序。 首先,理解SpringBoot的...

    java spring-boot shell 启动器

    Java Spring-Boot Shell 启动器是一个实用工具,它提供了通过Shell脚本来管理Spring-Boot应用的便捷方式。这个启动器允许用户启动、停止、重启和查看应用日志,而无需手动使用`kill`命令来结束进程。在IT环境中,...

    Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

    在Linux环境中,管理和部署Java应用程序,特别是Spring Boot应用,通常会使用Shell脚本来自动化启动、停止等操作。本文将详细讲解如何编写一个用于启动和停止Spring Boot jar程序的Shell脚本,以及脚本中涉及的关键...

    利用脚本启动java程序

    标题 "利用脚本启动Java程序" 涉及到的是如何通过编写脚本来自动化执行Java应用程序,这在日常开发和运维工作中非常常见。脚本语言如bash、Windows批处理等可以方便地帮助我们管理和控制Java程序的启动、停止以及...

    启动,停止某个某个java程序

    对于"stop.sh"这个文件,这可能是一个Shell脚本,用于自动化停止Java程序的过程。在Linux或Unix系统中,通常使用`jps`(Java进程查看器)命令找到Java进程ID,然后使用`kill`命令终止进程。一个简单的`stop.sh`脚本...

    Linux云计算-Shell脚本100例

    例如,使用Shell脚本来启动、停止Java应用程序,或者通过JMX接口获取运行时信息。 在“Linux云计算-Shell脚本100例@www.java1234.com.pdf”这份资料中,读者可以期待看到一系列实用的Shell脚本示例,涵盖上述提到的...

    shell脚本发布jar包服务,war包服务

    在IT行业中,shell脚本是Linux或Unix系统中用于自动化任务的强大工具,而jar和war文件则是Java应用程序的标准打包格式。这篇博客文章标题为“shell脚本发布jar包服务,war包服务”,意味着它将介绍如何使用shell脚本...

    linux的shell脚本快速部署java环境jdk+tomcat+mysql

    这篇内容将详细介绍如何通过Linux的shell脚本来快速部署Java环境,包括JDK、Tomcat和MySQL,这三个是构建Web应用程序的基础组件。 首先,让我们来了解一下JDK(Java Development Kit)。JDK是Java开发和运行的必备...

    Tomcat停止与启动shell

    使用shell脚本启动和停止Tomcat时,需要注意权限问题。确保只有授权的用户能够执行这些操作,避免安全风险。 6. **日志监控**: Tomcat在运行过程中会产生日志文件,如`catalina.out`,这对于排查问题和监控服务...

    java 操作脚本启动服务

    本主题将详细介绍如何利用Java编写脚本启动和停止服务,以及涉及到的相关技术点。 首先,让我们关注“java操作脚本命令”。在Linux环境中,我们通常使用shell脚本来管理服务。例如,启动一个Java服务,我们可以编写...

    shell 脚本- 启动或关闭应用进程

    本文讲述的是通过 shell 脚本管理服务器 上的应用程序,即启动或关闭应用程序。现应用在公司的一个 flask 项目上,可以保证功能可用,但不能保证这是最优解。 因为我也并非运维人员,整个脚本也是对着 shell 语法,...

    centos上通过sh文件启动jar等程序与命令详解.zip

    在Linux系统,特别是CentOS这样的基于Red Hat的发行版中,使用shell脚本来启动和管理Java应用程序(如jar包)是一种常见的做法。本文件包提供了一个名为`run.sh`的shell脚本模板以及一个`run命令详解.docx`文档,...

    linux 通过脚本执行java程序

    这使得我们能够更方便地管理和控制Java应用程序的启动、停止以及监控。下面将详细介绍如何编写一个简单的bash脚本来执行Java程序,并探讨相关知识点。 首先,你需要确保系统已经安装了Java运行环境(JRE)或Java...

    Java启动关闭脚本.zip

    接下来是`stop.sh`脚本,这是用来停止Java应用的。通常,它会包含以下步骤: 1. **查找Java进程**: 使用`jps`(Java Process Status)命令找到由当前用户运行的Java进程ID,特别是那些运行主类与目标应用匹配的进程...

Global site tag (gtag.js) - Google Analytics