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

在这里插入图片描述](https://img-blog.csdnimg.cn/2ed603270b314f18912764429d6861c2.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RlbGlsYWhfamF2YQ==,size_16,color_FFFFFF,t_70#pic_center)

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]
![在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值