启动和停止Java应用程序的Shell脚本(实例)

#!/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(可单独使用)

#!/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(可单独使用)

#!/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(可单独使用)

#!/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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值