看完这篇!教你三分钟学会Java项目主机启停脚本运用!

132 阅读2分钟

Java项目主机启停脚本示例

启动脚本


示例脚本如下:

# 定义变量
JAVA_HOME=/usr/local/java/jdk1.8.0_301
LOG_HOME=/app/iacctapp/applog/rd-cbn
JVM_ARGS="-XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -Xms1024m -Xmx1024m"

# 启动项目 
nohup ${JAVA_HOME}/bin/java ${JVM_ARGS} -Dloader.path=.,lib,classes -Dacctmgr.ms.instid=funddmdbcbn -jar acctmgr-boot.jar --server.port=32210 >${LOG_HOME}/consoleDmdbFund.log 2>&1 &

# 查看日志 
tail -f ${LOG_HOME}/consoleDmdbFund.log

定义变量
  • JAVA_HOME:jdk安装目录
  • LOG_HOME:程序日志输出目录
  • JVM_ARGS:jvm启动参数
启动项目
  • nohup :不挂断地运行命令。语法:nohup Command [ Arg … ] [ & ]
  • & :在后台运行一般nohup 和&一起用 :nohup command &
  • -Dloader.path:jvm加载目录,有多个用逗号分隔
  • -Dacctmgr.ms.instid=funddmdbcbn:自定义,方便进程定位
  • --server.port:端口暴露
  • 2>&1:将标准错误输出重定向到标准输出(屏幕)
名称名称操作符Java中表示
标准输入(stdin)0< 或 <<System.in
标准输出(stdout)1>, >>, 1> 或 1>>System.out
标准错误输出(stderr)22> 或 2>>System.err

2>&1一般放在最后,标准错误输出和程序日志才会都写到日志文件中。如果不放到最后,文件中只会输入日志,而标准错误输出是输出到屏幕 linux命令三剑客可参考Linux命令三剑客

查看日志

tail -f:动态输出日志文件内容到屏幕中

停止脚本


示例脚本如下:

#!/bin/bash

# 查找对应进程并杀掉
ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | awk '{print $2}' | while read processId 
do
        echo "stop acctmgr process $processId."
        kill $processId
done

# 显示杀进程过程与结果 
waitTimes=0
while true
do
        let waitTimes++

        commanderNum=`ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | wc -l`
        if [ ${commanderNum} -eq 0 ]; then
                echo "acctmgr process has been stopped."
                break;
        else
                echo "Wait for acctmgr process to exit, waitTimes ${waitTimes} ..."
        fi

        sleep 1;
done

查找对应进程

ps -ef:用标准的格式显示进程

grep "Dacctmgr.ms.instid=fundcbn":控制ps命令只输出Dacctmgr.ms.instid=fundcbn相关的进程

grep -v grep:过滤掉grep本身进程

awk '{print $2}':每行以空格或分隔符切割,输出第3位(从0计起)

杀进程
while read processId 
do
        echo "stop acctmgr process $processId."
        kill $processId
done

将上面读到的进程杀掉,知道所有进程停止为止

显示杀进程过程与结果
while true
do
        let waitTimes++

        commanderNum=`ps -ef | grep "Dacctmgr.ms.instid=fundcbn"| grep -v grep | wc -l`
        if [ ${commanderNum} -eq 0 ]; then
                echo "acctmgr process has been stopped."
                break;
        else
                echo "Wait for acctmgr process to exit, waitTimes ${waitTimes} ..."
        fi

        sleep 1;
done

该段代码的作用是每隔一秒循环对应进程的扫描,如果的进程还存在对应进程,输出提示语句,直到进程不存在为止

分类: [Linux] 在这里插入图片描述