前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux .sh脚本 启动、停止、重启、状态 Jar包

Linux .sh脚本 启动、停止、重启、状态 Jar包

作者头像
收心
发布2022-01-19 15:06:49
8.3K0
发布2022-01-19 15:06:49
举报
文章被收录于专栏:Java实战博客Java实战博客

案例参考,超详细备注 (Notpad++ 有颜色标注 更易读)

windows请参考:https://cloud.tencent.com/developer/article/1936792

代码语言:javascript
复制
#!/bin/sh
# author name:zanglikun
# author QQ:740969606

#	$0 是文件名
#	$1 是第一个参数

# echo $0 start 是启动服务
# echo $0 stop 是停止服务
# echo $0 restart 是重启服务
# echo $0 status 是查看服务状态

# 指定JAR包文件夹,将来运行的时候,此文件需要与jar包同级
AppName=你的jar名字.jar

# JVM参数
JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC -Dspring.profiles.active=pro -Dserver.port=18083"
# -Dspring.profiles.active=pro 指的是激活application-pro.properties配置文件
# -Dserver.port=18083 可指定运行端口

# 此变量会获取到当前路径 等价于 Linux的pwd命令
APP_HOME=`pwd`

# 日志路径 一定要有此路经的文件夹,没有此路径的文件夹,将不会有日志文件:$AppName.log,记得创建logs文件夹。
LOG_PATH=$APP_HOME/logs/$AppName.log

# 获取第一个参数 如果为空,将会提示这个
if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi

# 如果没有指定JAR包,将会提示这个
if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

# start方法
function start()
{
    # 获取PID,最后打印出结果$2 就是PID 注意,此处$2不是我们运行此脚本的第二个参数($0 不算做第一个参数)!
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`

	if [ x"$PID" != x"" ]; then
	    echo "$AppName is running..."
	else
		nohup java -jar  $JVM_OPTS $AppName > $LOG_PATH 2>&1 &
		# 下面可以查看一下命令对不对 
		#echo	"nohup java -jar  $JVM_OPTS $AppName > $LOG_PATH 2>&1 &"
		echo "Start $AppName success..."
	fi
}

# stop方法
function stop()
{
    echo "Stop $AppName"
	
	PID=""
	# 定制查询服务PID的方法
	query(){
		PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
	}
	# 第一次查询状态,更变PID
	query
	
	if [ x"$PID" != x"" ]; then
		kill -TERM $PID
		echo "$AppName (pid:$PID) exiting..."
		while [ x"$PID" != x"" ]
		do
			# 间隔1秒执行后续代码
			sleep 1
			# 这是一个死循环,检查每一次PID,都会更变PID的最新结果,如果PID等于空了,就结束循环,输出结束
			query
		done
		echo "$AppName exited."
	else
		echo "$AppName already stopped."
	fi
}

# restart方法 注意方法内部的内容:调用了2个别的方法,所以从脚本加载从上倒下的顺序上,这2个被调用的方法,都要在此方法之前!
function restart()
{	
    # 先停止服务,然后等待2秒后,再次重启服务,不过2秒时间太短,建议久一点
    stop
    sleep 2
    start
}

# status方法
function status()
{
    # 获取PID
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
    
    # 如果PID为0,代表服务器停止,不为0,就代表服务器正在运行
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}

# 获取第一个参数,执行不同的方法!
case $1 in
    start)
     # 执行start方法
    	start
    	;;
    stop)
     # 执行stop方法
    	stop
    	;;
    restart)
     # 执行resrart方法
    	restart
    	;;
    status)
     # 执行status方法
    	status
    	;;
    *)
# case的结束标志
esac

启动方式

步骤1:将你的jar包与你的.sh脚本放到同级目录

步骤2:修改上面的脚本的将 AppName 替换为Jar包名字

步骤3:在此目录下创建一个logs文件夹,如果不创建此文件夹,将不会有日志文件!

步骤4:用命令运行脚本

代码语言:javascript
复制
# 启动你的服务
./你的文件名.sh start


# 停止你的服务
./你的文件名.sh stop


# 查看你的服务状态
./你的文件名.sh status


# 重启你的服务
./你的文件名.sh restart

演示

重启脚本,同时展示脚本运行时间

代码语言:javascript
复制
# 说明 我有4个sh文件,同时运行,并追加参数restart!
starttime=$(date -d now +%s)
echo -e "\033[0;31m当前时间是:$(date "+%Y-%m-%d %H:%M:%S") 开始全部重启\033[0m"
echo
echo
./1login.sh restart; 
echo
echo
./2room.sh restart;
echo
echo
./3friendcricle.sh restart;
echo
echo
./4pay.sh restart;
echo
echo
endtime=$(date -d now +%s)
echo 
echo -e  "\033[0;31m当前时间是:$(date "+%Y-%m-%d %H:%M:%S") 已经完全重启了!重启一共耗费了$(($endtime - $starttime))秒 \033[0m";

查看程序的状态

代码语言:javascript
复制
echo -e "\033[0;31m当前时间是:$(date "+%Y-%m-%d %H:%M:%S") 开始检测状态\033[0m"
./1login.sh status; 
echo
./2room.sh status;
echo
./3friendcricle.sh status;
echo
./4pay.sh status;
echo -e  "\033[0;31m当前时间是:$(date "+%Y-%m-%d %H:%M:%S") 已经检测状态完毕了! 请核实!\033[0m";

特殊说明:

解决问题的光鲜,藏着磕Bug的痛苦。

万物皆入轮回,谁也躲不掉!

以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 案例参考,超详细备注 (Notpad++ 有颜色标注 更易读)
  • 启动方式
    • 步骤1:将你的jar包与你的.sh脚本放到同级目录
      • 步骤2:修改上面的脚本的将 AppName 替换为Jar包名字
        • 步骤3:在此目录下创建一个logs文件夹,如果不创建此文件夹,将不会有日志文件!
          • 步骤4:用命令运行脚本
          • 演示
            • 重启脚本,同时展示脚本运行时间
              • 查看程序的状态
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档