网站首页 > java教程 正文
用于启动、停止、重启和检查应用程序的运行状态。
它首先定义了一些变量和 JVM 参数,然后根据用户输入的命令执行相应的函数。
- start() 函数启动应用程序,
- stop() 函数停止应用程序,
- restart() 函数停止并重新启动应用程序,
- status() 函数检查应用程序的运行状态
#!/bin/bash
AppName=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 -Xms2G -Xmx2G -XX:PermSize=256M -XX:MaxPermSize=512M
-XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps
-XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC"
if [ "$1" = "" ];
then
echo -e "Usage: {start|stop|restart|status}"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "AppName required"
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
使用脚本时应该注意以下问题:
- 安全问题:确保脚本来源可信,不要运行未知来源的脚本,以免造成损失。
- 兼容性问题:脚本可能依赖于某些特定的软件或版本,需要先确认环境是否符合要求。
- 参数问题:根据脚本的说明,确保输入参数正确,避免出现错误。
- 文件权限问题:脚本可能需要访问或修改某些文件,需要确保文件的权限设置正确。
- 日志记录问题:脚本的输出可能会写入日志文件,需要关注日志文件的大小和内容,避免占用过多磁盘空间。
- 脚本可读性问题:脚本的可读性可能不太好,需要仔细研究代码,避免出现理解错误导致的问题。
猜你喜欢
- 2025-06-15 Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 2025-06-15 推荐一款超棒的SpringCloud 脚手架项目
- 2025-06-15 IDEA将项目打包成jar包(idea打包普通java项目)
- 2025-06-15 Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 2025-06-15 记录Dockerfile将jar包构建成部署所需的镜像
- 2025-06-15 项目基础部署汇总八---linux下xxl-job安装
- 2025-06-15 Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 2025-06-15 终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 2025-06-15 如何将本地JAR文件添加到Maven项目中
- 2025-06-15 Java 类隔离应用:多 Jar 包支持(java接口隔离原则)
你 发表评论:
欢迎- 06-15Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 06-15推荐一款超棒的SpringCloud 脚手架项目
- 06-15IDEA将项目打包成jar包(idea打包普通java项目)
- 06-15Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 06-15记录Dockerfile将jar包构建成部署所需的镜像
- 06-15项目基础部署汇总八---linux下xxl-job安装
- 06-15Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 06-15终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 最近发表
-
- Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 推荐一款超棒的SpringCloud 脚手架项目
- IDEA将项目打包成jar包(idea打包普通java项目)
- Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 记录Dockerfile将jar包构建成部署所需的镜像
- 项目基础部署汇总八---linux下xxl-job安装
- Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 如何将本地JAR文件添加到Maven项目中
- Java 类隔离应用:多 Jar 包支持(java接口隔离原则)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)