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

本文介绍了一个用于管理Java应用程序的Shell脚本,包括启动、停止、重启及状态检查等功能,并详细解释了如何通过脚本来精准定位并操作特定的Java进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3/10更新的最全脚本[下附使用方法]

__

#!/bin/sh
JAVA_OPTS="-Duser.timezone=GMT+8 -server -Xms512m -Xmx512m -Xloggc:agent.log"

APP_LOG=/home/monitor/alert-agent/

APP_HOME=/home/monitor/alert-agent/

APP_MAIN=com.upyoo.agent.AgentServer

CLASSPATH=$APP_HOME/classes

for tradePortalJar in "$APP_HOME"/*.jar
do
   CLASSPATH="$CLASSPATH":"$tradePortalJar"
done

tradePortalPID=0
 
getTradeProtalPID(){

    javaps=`ps -ef|grep java | awk '{ if($8=="./jre/bin/java") print $2}'`
if [ -n  "$javaps" ]; then
        tradePortalPID=$javaps
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"
        cd /home/monitor/alert-agent
	sudo ./start.sh
	getTradeProtalPID
        if [ $tradePortalPID -ne 0 ]; then
            echo "(PID=$tradePortalPID)...[Success]"
            echo "======================================================================================"
        else
            echo "[Failed]"
            echo "======================================================================================"
        fi
    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
}

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
}
getclearlog(){
sudo rm /home/monitor/alert-agent/*.log.*
sudo cat /dev/null > /home/monitor/alert-agent/agent.log
echo "======================================================================================"
echo "rm log files[*.log.*]"
echo "clean agent.log"
echo "======================================================================================"
}
restartup(){
shutdown
startup
echo "======================================================================================"
echo "$APP_MAIN is restart successfully!(PID=$tradePortalPID)"
echo "======================================================================================"
}
if [ "$1" == "start" ]||[ "$1" == "1" ];then
startup
elif [ "$1" == "2"  ];then
shutdown
elif [ "$1" == "shut"  ];then
shutdown
elif [ "$1" == "3"  ]||[ "$1" == "restart" ];then
restartup
elif [ "$1" == "4"  ]||[ "$1" == "status" ];then
getServerStatus
elif [ "$1" == "5"  ]||[ "$1" == "clear" ];then
getclearlog
else
echo "usage: type> {$0 1} or {$0 start}    -->  startup; "
echo "       type> {$0 2} or {$0 shut}     -->  shutdown"
echo "       type> {$0 3} or {$0 restart}  -->  restart"
echo "       type> {$0 4} or {$0 status}   -->  getServerStatus"
echo "       type> {$0 5} or {$0 clear}    -->  clean logs"
fi

[monitor@i-755-42433-VM ~]$ sudo bash commonstart.sh
usage: type> {commonstart.sh 1} or {commonstart.sh start}    -->  startup;
       type> {commonstart.sh 2} or {commonstart.sh shut}     -->  shutdown
       type> {commonstart.sh 3} or {commonstart.sh restart}  -->  restart
       type> {commonstart.sh 4} or {commonstart.sh status}   -->  getServerStatus
       type> {commonstart.sh 5} or {commonstart.sh clear}    -->  clean logs

________

http://blog.youkuaiyun.com/jadyer/article/details/7960802

使用awk打印符合条件包含符合条件内容的行

如下, 打印出本行中第二列, 要求此行中 第1列是root, (为了杀进程!)

ps -ef|grep java | awk '{ if($1~"root") print $2}'


停止的脚本:

背景:

因为运行

ps -ef|grep java

出现了root和monitor两种:

root     39321     1  5 16:56 pts/1    00:00:00 ./jre/bin/java -cp .:./alert-agent-0.0.1-SNAPSHOT.jar:./snmp4j-2.3.1.jar:./commons-beanutils-1.8.0.jar:./commons-collections-3.1.jar:./commons-lang-2.5.jar:./commons-logging-1.1.jar:./ezmorph-1.0.6.jar:./json-lib-2.4-jdk15.jar:./log4j-1.2.12.jar:./logkit-1.0.1.jar:./uc-common-1.0.0.jar:./ucid-1.0.0.jar:./quartz-2.2.1.jar:./quartz-jobs-2.2.1.jar:./slf4j-log4j12-1.7.7.jar:./slf4j-api-1.7.5.jar:./httpclient-4.3.6.jar:./httpmime-4.3.6.jar:./httpcore-4.3.3.jar:./commons-httpclient-3.1.jar com.upyoo.agent.AgentServer
monitor  39352  7706  0 16:56 pts/1    00:00:00 grep java

为了使用停止脚本方便, 需要知道39321和唯一确定是这个程序的区别码[经过不断测试, 确定为
./jre/bin/java
也就是

ps -ef|grep java | awk '{ if($8~"./jre/bin/java") print $2}'
通过这样的方式,便可以确定了

脚本如下:


#!/bin/sh
APP_MAIN=com.upyoo.agent.AgentServer
APP_USER=root
tradePortalPID=0

getTradeProtalPID(){
    javaps=`ps -ef|grep java | awk '{ if($8~"./jre/bin/java") print $2}'`
echo $javaps
if [ -n  "$javaps" ]; then
        tradePortalPID=$javaps
else
        tradePortalPID=0
    fi
}

shutdown(){
    getTradeProtalPID
    echo "================================================================================================================"
    if [ $tradePortalPID -ne 0 ]; then
        echo -n "Stopping $APP_MAIN(PID=$tradePortalPID)..."
      sudo  kill  $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

这个脚本写在了程序jar同行文件夹下, 如果要写在外面, 建议再写一个专门的sh

cd alert-agent
sudo bash ./sdown.sh

注: 如果是sudo 起的, 那么肯定是root开头的, 则应该以sudo关闭

如果不是, 则直接不用sudo

===================================================================================================================================

关闭脚本改进版>sdown.sh

why update? 为什么要改进

因为在运行此脚本时, 出现了两个 问题, 

一 在杀进程的时候, 出现了进程不唯一, 于是无法杀掉

[monitor@monitor-agent-nm4 ~]$ sudo bash ./alert-agent/sdown.sh
[sudo] password for monitor:
================================================================================================================
./alert-agent/sdown.sh: line 18: [: too many arguments
com.upyoo.agent.AgentServer is not running
================================================================================================================

解决过程:

[monitor@monitor-agent-nm4 ~]$ ps -ef|grep java | awk '{ if($8~"./jre/bin/java") print $2}'
13333
21228
[monitor@monitor-agent-nm4 ~]$ ps -ef|grep java
monitor  13333 13331  0 14:02 ?        00:00:15 /home/monitor/ucmp-agent/jre/bin/java -Djava.security.auth.login.config=../../bundles/agent-4.6.6/jaas.config -Xmx128m -Djava.net.preferIPv4Stack=true -Dagent.install.home=../.. -Dagent.bundle.home=../../bundles/agent-4.6.6 -Dsun.net.inetaddr.ttl=60 -Djava.library.path=%LD_LIBRARY_PATH%:../../wrapper/lib -classpath ../../bundles/agent-4.6.6/lib/hq-agent-core-4.6.6.jar:../../bundles/agent-4.6.6/lib/hq-lather-4.6.6.jar:../../bundles/agent-4.6.6/pdk/lib/activation-1.1.jar:../../bundles/agent-4.6.6/pdk/lib/ant-1.7.1.jar:../../bundles/agent-4.6.6/pdk/lib/ant-launcher-1.7.1.jar:../../bundles/agent-4.6.6/pdk/lib/antlr-2.7.6.jar:../../bundles/agent-4.6.6/pdk/lib/aopalliance-1#!/bin/sh
.0.jar:../../bundles/agent-4.6.6/pdk/lib/asm-1.5.3.jar:../../bundles/agent-4.6.6/pdk/lib/asm-attrs-1.5.3.jar:../../bundles/agent-4.6.6/pdk/lib/backport-util-concurrent-3.1.jar:../../bundles/agent-4.6.6/pdk/lib/cglib-2.1_3.jar:../../bundles/agent-4.6.6/pdk/lib/cm-file-monitor-1.0.1.jar:../../bundles/agent-4.6.6/pdk/lib/cm-versioncontrol-1.0.1.jar:../../bundles/agent-4.6.6/pdk/lib/commons-beanutils-1.7.0.jar:../../bundles/agent-4.6.6/pdk/lib/commons-codec-1.1.jar:../../bundles/agent-4.6.6/pdk/lib/commons-collections-2.1.1.jar:../../bundles/agent-4.6.6/pdk/lib/commons-collections-3.2.1.jar:../../bundles/agent-4.6.6/pdk/lib/commons-digester-1.6.jar:../../bundles/agent-4.6.6/pdk/lib/commons-lang-2.5.jar:../../bundles/agent-4.6.6/pdk/lib/commons-logging-1.0.4.jar:../../bundles/agent-4.6.6/pdk/lib/commons-validator-1.3.1.jar:../../bundles/agent-4.6.6/pdk/lib/dnsjava-2.0.6.jar:../../bundles/agent-4.6.6/pdk/lib/dom4j-1.6.1.jar:../../bundles/agent-4.6.6/pdk/lib/geronimo-j2ee-management_1.0_spec-1.1.jar:../../bundles/agent-4.6.6/pdk/lib/getopt-1.0.13.jar:../../bundles/agent-4.6.6/pdk/lib/hibernate-3.2.6.ga.jar:../../bundles/agent-4.6.6/pdk/lib/hq-common-4.6.6.jar:../../bundles/agent-4.6.6/pdk/lib/hq-pdk-4.6.6.jar:../../bundles/agent-4.6.6/pdk/lib/hq-product.jar:../../bundles/agent-4.6.6/pdk/lib/hq-util-4.6.6.jar:../../bundles/agent-4.6.6/pdk/lib/hqapi1-5.0.0-HA.jar:../../bundles/agent-4.6.6/pdk/lib/httpclient-4.1.1.jar:../../bundles/agent-4.6.6/pdk/lib/httpcore-4.1.jar:../../bundles/agent-4.6.6/pdk/lib/icu4j-3.8.jar:../../bundles/agent-4.6.6/pdk/lib/jasypt-1.6.jar:../../bundles/agent-4.6.6/pdk/lib/jaxb-api-2.1.jar:../../bundles/agent-4.6.6/pdk/lib/jaxb-impl-2.1.3.jar:../../bundles/agent-4.6.6/pdk/lib/jboss-common-logging-spi-2.0.4.GA.jar:../../bundles/agent-4.6.6/pdk/lib/jboss-remoting-2.2.2.SP8.jar:../../bundles/agent-4.6.6/pdk/lib/jcl-over-slf4j-1.6.1.jar:../../bundles/agent-4.6.6/pdk/lib/jdom-1.1.jar:../../bundles/agent-4.6.6/pdk/lib/jpathwatch-0-94.jar:../../bundles/agent-4.6.6/pdk/lib/jsch-0.1.42.jar:../../bundles/agent-4.6.6/pdk/lib/log4j-1.2.14.jar:../../bundles/agent-4.6.6/pdk/lib/org.eclipse.jgit-1.0.0.201106090707-r.jar:../../bundles/agent-4.6.6/pdk/lib/org.eclipse.jgit.junit-1.0.0.201106090707-r.jar:../../bundles/agent-4.6.6/pdk/lib/org.springframework.roo.file.monitor-1.0.2.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/org.springframework.roo.file.monitor.polling-1.0.2.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/org.springframework.roo.support-1.0.2.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/oro-2.0.8.jar:../../bundles/agent-4.6.6/pdk/lib/serializer-2.7.1.jar:../../bundles/agent-4.6.6/pdk/lib/sigar-1.6.6.jar:../../bundles/agent-4.6.6/pdk/lib/slf4j-api-1.6.1.jar:../../bundles/agent-4.6.6/pdk/lib/slf4j-log4j12-1.6.1.jar:../../bundles/agent-4.6.6/pdk/lib/snmp4j-1.11.jar:../../bundles/agent-4.6.6/pdk/lib/spring-aop-3.0.5.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/spring-asm-3.0.5.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/spring-beans-3.0.5.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/spring-context-3.0.5.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/spring-core-3.0.5.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/spring-expression-3.0.5.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/spring-oxm-3.0.5.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/spring-tx-3.0.5.RELEASE.jar:../../bundles/agent-4.6.6/pdk/lib/stax-api-1.0-2.jar:../../bundles/agent-4.6.6/
root     21228     1 19 15:21 pts/1    00:01:21 ./jre/bin/java -cp .:./alert-agent-0.0.1-SNAPSHOT.jar:./snmp4j-2.3.1.jar:./commons-beanutils-1.8.0.jar:./commons-collections-3.1.jar:./commons-lang-2.5.jar:./commons-logging-1.1.jar:./ezmorph-1.0.6.jar:./json-lib-2.4-jdk15.jar:./log4j-1.2.12.jar:./logkit-1.0.1.jar:./uc-common-1.0.0.jar:./ucid-1.0.0.jar:./quartz-2.2.1.jar:./quartz-jobs-2.2.1.jar:./slf4j-log4j12-1.7.7.jar:./slf4j-api-1.7.5.jar:./httpclient-4.3.6.jar:./httpmime-4.3.6.jar:./httpcore-4.3.3.jar:./commons-httpclient-3.1.jar com.upyoo.agent.AgentServer
monitor  22606 22165  0 15:28 pts/2    00:00:00 grep java


[monitor@monitor-agent-nm4 ~]$ ps -ef|grep java | awk '{ if($8~"./jre/bin/java") print $8}'
/home/monitor/ucmp-agent/jre/bin/java
./jre/bin/java
[monitor@monitor-agent-nm4 ~]$ ps -ef|grep java | awk '{ if($8 -eq "./jre/bin/java") print $8}'
/home/monitor/ucmp-agent/jre/bin/java
./jre/bin/java
grep
awk
[monitor@monitor-agent-nm4 ~]$ ps -ef|grep java | awk '{ if($8=="./jre/bin/java") print $8}'
./jre/bin/java

于是得出解决办法:

ps -ef|grep java | awk '{ if($8=="./jre/bin/java") print $8}'

但是随之出现了问题2

二 在执行脚本时, 出现了多次打印success的情况

[monitor@monitor-agent-nm4 ~]$ sudo bash ./alert-agent/sdown.sh
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...[Success]
================================================================================================================
================================================================================================================
Stopping com.upyoo.agent.AgentServer(PID=21228)...kill 21228: No such process
[Failed]
================================================================================================================
分析原因:

是因为在杀进程的时候, 进程不能被马上杀掉, 但是脚本又一直在扫描, 所以出现了这么蛋疼的事情

改进程序, 因为只涉及到单进程的kill, 所以去掉循环扫描过程即可

#!/bin/sh
APP_MAIN=com.upyoo.agent.AgentServer
APP_USER=root
tradePortalPID=0

getTradeProtalPID(){
    javaps=`ps -ef|grep java | awk '{ if($8=="./jre/bin/java") print $2}'`
if [ -n  "$javaps" ]; then
        tradePortalPID=$javaps
else
        tradePortalPID=0
    fi
}

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

shutdown



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不止鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值