设为首页 加入收藏

TOP

linux 环境启动jar服务, 启动脚本详细解释(一)
2023-07-23 13:40:10 】 浏览:51
Tags:linux jar 服务 解释

掰碎了讲一个jar包启动文件.

  • 当前服务目录如下
# ls /easy/test/info/ -> bin  mytest.jar
#  ls /easy/test/info/bin/ -> spring-boot.sh

spring-boot.sh 文件内容如下

#!/bin/bash
# 环境索引: 标识解释器为bash ./当前文件 等同于 sh 当前文件
# 本次解析执行命令= ./easy/test/info/bin/spring-boot.sh  start
JAVA_OPTIONS_INITIAL=-Xms500M
JAVA_OPTIONS_MAX=-Xmx1000M
# 定义变量: 注意=左右不要有空格
BINPATH=$(cd `dirname $0`; pwd)
# 获取脚本所在的项目名称
# $0  获取当前脚本本身的名字,其他包执行则包含到当前文件的路径
# dirname 命令去除文件名中的非目录部分,仅显示与目录有关的内容
# $()和反引号``的作用结果相同都是用来作命令替换的,通俗来讲就是把命令执行后的结果作为参数返回
# pwd 命令用于显示工作目录的绝对路径名称
# 先执行 dirname $0 获取当前目录名称,
# 再执行cd 切换到当前目录,
# ; 分号; 用分号隔开两个命令
# 再执行pwd, 用BINPATH 接受pwd返回结果.
# $0 ==>            ./easy/test/info/bin/spring-boot.sh
# `dirname $0` ==>  ./easy/test/info/bin/ 
# BINPATH==>        /easy/test/info/bin

if [ $(ls ${BINPATH%/bin*}|grep .*.jar|wc -l) -gt 1 ] ;then
# 字符串截取:  ${parameter%word} # 删除匹配后缀
#   ${BINPATH%/bin*} 获取BINPATH 删除/bin 后面部分
# grep 匹配
# wc 计数
# -gt 大于
# if 流程判断
# 获取脚本上级的.jar 结尾文件是否>1个.
	echo "目录中含有多个jar文件"
	exit 0
fi
_JAR_KEYWORDS=$(ls ${BINPATH%/bin*}|grep .*.jar)
# 获取当前jar包名称(mytest.jar)

if [ "$_JAR_KEYWORDS" =  "" ] ;then
	echo "${BINPATH%/bin*}下未找到jar包!!"
	exit 0
fi
APP_NAME=${_JAR_KEYWORDS%.jar*}
# 字符串截取:  ${parameter%word} # 删除匹配后缀
#   ${_JAR_KEYWORDS%.jar*} 去掉jar包的.jar后缀, 赋值给appName字段(mytest)
if [ $1 == "start" ] ;then
	echo "当前启动的项目为:$APP_NAME,项目所在目录:${BINPATH%/bin*}"
fi
# 查询进程,去掉grep查询, 取第二位(pid)
PID=$(ps aux | grep ${_JAR_KEYWORDS} | grep -v grep | awk '{print $2}' )
# ps    进程查看
# | grep -v grep 排除grep 进程,即当前的ps查询进程
# awk 行处理器, awk '{print $2}' 输出第2行数据, 即pid行.
function check_if_process_is_running {
    if [ "$PID" = "" ]; then
        return 1
    fi
    ps -p $PID | grep "java"
    # ps 进程查看, 根据pid查看进程
    return $?
    # $? 上一指令的返回值,成功是0,不成功是1。
}

case "$1" in
status)
# case 选择命令
# $1 执行该文件的第一个参数.
if check_if_process_is_running
then
echo -e "\033[32m $APP_NAME is running \033[0m"
# echo -e 转义输出
# \033[xm 控制字符 \033[32m 指定当前文本绿色展示.
else
echo -e "\033[32m $APP_NAME not running \033[0m"
fi
;;
stop)
if ! check_if_process_is_running
then
echo -e "\033[32m $APP_NAME already stopped \033[0m"
exit 0
fi
kill -9 $PID
# kill 杀死指定进程
echo -e "\033[32m Waiting for process to stop \033[0m"
NOT_KILLED=1
for i in {1..20}; do
if check_if_process_is_running
then
echo -ne "\033[32m . \033[0m"
# echo -ne  转义输出, 不进行换行
sleep 1
else
NOT_KILLED=0
fi
done
echo
if [ $NOT_KILLED = 1 ]
then
echo -e "\033[32m Cannot kill process \033[0m"
exit 1
fi
echo -e "\033[32m $APP_NAME already stopped \033[0m"
;;
start)
if [ "$PID" != "" ] && check_if_process_is_running
then
echo -e "\033[32m $APP_NAME already running \033[0m"
exit 1
fi
cd ${BINPATH%/bin*}
JAVA_MEM_SIZE_OPTS="-Xmx256m -Xms128m -Xmn256m -XX:PermSize=200m -XX:MaxPermSize=200M -Xss256k"
JAVA_MEM_OPTS=" -server $JAVA_MEM_SIZE_OPTS -XX:SurvivorRatio=2 -XX:+UseParallelGC "
nohup java -jar $JAVA_OPTIONS_INITIAL $JAVA_OPTIONS_MAX $_JAR_KEYWORDS --debug> 123.log 2>&1 &
#nohup 不挂起执行
echo -ne "\033[32m Starting \033[0m"
for i in {1..20}; do
# 通配符(globbing) {1..20} 循环20次,分别取1,2,3...19,20
echo -ne "\033[32m.\033[0m"
sleep 1
done
if check_if_proce
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇IO相关了解 下一篇Linux文件描述符

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目