Shell脚本启动/停止Jar包

Shell脚本启动/停止Jar包

jar.sh文件

#!/bin/bash

AppName=这里输入jar包名称
APP_HOME=$(pwd)/$AppName

#JVM参数
# -Xms:指定jvm堆的初始大小,默认为物理内存的1/64;可以指定单位,比如k、m,若不指定,则默认为字节。
# -Xmx:指定jvm堆的最大值,默认为物理内存的1/4,单位与-Xms一致;在开发过程中,通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。
# -XX:NewSize: 设置新生代对象能占用内存够的初始大小
# -XX:MaxNewSize: 设置新生代能占用内存的最大值;这个值应该小于 -Xmx的值
# -XX:SurvivorRatio: 新生代中survivor区和eden区的比例
# -XX:NewRatio: 新生代内存容量与老生代内存容量的比例
# -XX:PermSize: 表示非堆区初始内存分配大小
# -XX:MaxPermSize:非堆区分配的内存的最大上限
# -XX:+HeapDumpOnOutOfMemoryError:	当首次遭遇OOM(OutOfMemoryError)时导出此时堆中相关信息
# -XX:+PrintGCDateStamps: 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
# -XX:+PrintGCDetails: 输出详细GC日志
# -XX:+UseParallelGC: 启用并行GC
# -XX:+UseParallelOldGC: 对Full GC启用并行,当-XX:-UseParallelGC启用时该项自动启用
# -Xss: 设置每个线程的堆栈大小
JVM_OPTS="$APP_HOME -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"


if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi

if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

function start()
{
    OLDPID=$(ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}')

	if [ x"$OLDPID" != x"" ]; then
	    echo "$AppName is running..."
        exit
	else
	  # /dev/null 表示linux的空设备文件,所以往这个文件里面写入的内容都会丢失
	  # 1、标准输出到空设备文件,错误输出重用了标准输出的描述符,所以错误输出也到空设备文件中 
	  # nohup java -jar  $JVM_OPTS > /dev/null 2>&1 &
	  # 2、标准输出和错误输出都写入到 app.log日志文件中
	  nohup java -jar  $JVM_OPTS > app.log 2>&1 &
	  # 3、标准输出写入到 app.log日志文件,错误输出写入到error.log中
	  # nohup java -jar  $JVM_OPTS > app.log 2>error.log &
	  echo "Start $AppName ..."
	fi

    PID=$(ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}')
    if [ x"$PID" = x"" ]; then
	    echo "$AppName start fail"
        exit
    else
        echo "$AppName start success"
    fi
}

function stop()
{
    echo "Stop $AppName"
	
	PID=""
	query(){
		PID=$(ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}')
	}

	query
	if [ x"$PID" != x"" ]; then
		kill -TERM $PID
		echo "$AppName (pid:$PID) exiting..."
		while [ x"$PID" != x"" ]
		do
			sleep 1
			query
		done
		echo "$AppName exited."
	else
		echo "$AppName already stopped."
	fi
}

function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    PID=$(ps -ef |grep java|grep $AppName|grep -v grep|wc -l)
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    *)

esac

posted on 2021-09-24 16:40  cxbks  阅读(339)  评论(0)    收藏  举报