1.直接启动

#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=XXXX-api-1.0.jar #使用说明,用来提示输入参数
usage() {
echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
exit 1
} #检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
} #启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
#nohup java -jar $APP_NAME > /dev/null 2>&1 &
nohup java -jar $APP_NAME -config.spring=./application.properties &
echo "${APP_NAME} start success"
fi
} #停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
} #输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
} #重启
restart(){
stop
start
} #根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac

启动时健康检查

前提在接口中需要提供这个一个接口 http://localhost:${SERVER_PORT}/api/health/ping  返回 "pong" 字符串

#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=XXX-order-api-1.0.jar
SERVER_PORT=8080
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
exit 1
} #检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
} #启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
#nohup java -jar $APP_NAME > /dev/null 2>&1 &
#nohup java -jar $APP_NAME -config.spring=./application.properties &
nohup java -jar $APP_NAME >/dev/null 2>&1 &
echo "nohup java -jar $APP_NAME >/dev/null 2>&1 &"
OUTPUT=init
OUTPUT_SUC=pong
while [ "$OUTPUT" != "$OUTPUT_SUC" ]; do
echo -e ".\c"
sleep 3
OUTPUT=`curl -XGET http://localhost:${SERVER_PORT}/api/health/ping`
echo "OUTPUT = $OUTPUT"
done
echo "${APP_NAME} start success"
fi
} #停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill $pid
else
echo "${APP_NAME} is not running"
fi
} #输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
} #重启
restart(){
stop
start
} #根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac

2.以服务的方式启动

# 授权可执行
chmod +x XXX-api-1.0.jar
# 创建软链接
ln -s /home/xxx/XXXX-api/XXXX-api-1.0.jar /etc/init.d/syt-XXXX-api
# 启停服务
service xxx-XXXX-api start|stop|restart # 使用service xx start命令后可能出现Unable to find Java需添加java软链接
ln -s /usr/local/jdk1.8.0_231/bin/java /sbin/java

3.将sql日志写入文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--在properties文件中找到对应的配置项-->
<springProperty scope="context" name="logging.path" source="logging.path"/>
<springProperty scope="context" name="logging.level" source="logging.level"/> <!--控制台日志输出-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender> <!--普通文件日志输出-->
<appender name="ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!--正式上线可启用(不打印sql日志)-->
<!--<level>${logging.level}</level>-->
<level>debug</level>
</filter>
<file>${logging.path}/all.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logging.path}/all.%d.%i.log</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!--错误文件日志输出-->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<file>${logging.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logging.path}/error.%d.%i.log</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender> <root level="${logging.level}">
<appender-ref ref="STDOUT"/>
<appender-ref ref="ALL"/>
<appender-ref ref="ERROR"/>
</root> </configuration>

Java项目生产启动、关闭脚本的更多相关文章

  1. SpringBoot项目快速启动停止脚本

    SpringBoot项目快速启动停止脚本 1.在jar包同级目录下,创建 app.sh #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] t ...

  2. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  3. Intellij IDEA导入JAVA项目并启动(哈哈哈,天天都有人问)

    最近有很多同学,竟然不知道如何使用Intellij IDEA打开Java项目并启动 现在来讲一下,希望不要忘记了 1.打开IDEA开机页面 Maven项目 2.Maven项目是以pom文件引入各项ja ...

  4. Ops:jar包启动关闭脚本

    简介 公司开发架构为java语言的rpc dubbo架构,将功能分解为各个模块,模块较多,发布到环境上的应用为编译后的jar包和配置文件,以及启动关闭jar包的shell脚本.之前经常会出现进程启动不 ...

  5. springboot启动关闭脚本

    springboot项目jar包启动,application.properties.jar包.shell脚本.static目录(静态页面和jar包分离)在同一目录下 [start.sh] #!/bin ...

  6. Java项目生成电脑桌面快捷脚本

    一.场景说明 经常需要查询以及设置手机验证码,一般验证码都是放在Redis,为了节省短信费,可以直接设置Redis,本篇内容主要介绍如何便捷查询和设置手机验证码,非开发人员也会操作. 二.Java代码 ...

  7. VMware相关服务启动关闭脚本

    VMware相关服务 VMware Authonrization Service:用于启动和访问虚拟机的授权和身份验证服务 VMware DHCP Service: IP自动分配协议——它不启动 虚拟 ...

  8. 分享一个php的启动关闭脚本(原)

    自己简单写的一个php服务的启动脚本和大家分享 思路(实现的原理): 1:function模块+case语句多分支判断 2:通过添加# chkconfig: 2345 43 89注释实现开机自启动(前 ...

  9. 【4】Kafka集群启动/关闭脚本

    说明:本脚本基于SSH服务器免密登录,如集群未配置SSH,参照:<SSH安装配置> . 一.启动脚本:start-kafka-cluster.sh #!/bin/bash brokers= ...

  10. Java项目中启动Tomcat报错invalid LOC header

    原因: 可能是jar包有问题. 解决方法: 1.找到加载不了的类对应的jar包. 2.在tomcat中webapps/INF/lib中找到对应的jar包,然后删除. 3.重新下载其它版本的jar包. ...

随机推荐

  1. Excel表格MID函数使用-截图单元格字符长度

    Excel表格MID函数使用-截图单元格字符长度 =MID(B2,1,6) //代表的是从B2单元格,从第1个字符开始,截图6个字符长度.然后双击该单元格,整个列都会截取

  2. 浅拷贝、深拷贝与序列化【初级Java必需理解的概念】

    浅拷贝 首先创建两个类,方便理解浅拷贝 @Data class Student implements Cloneable{ //年龄和名字是基本属性 private int age; private ...

  3. TXT文本文件存储

    用解析器解析出数据之后,接下来就是存储数据了.保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如 TXT.JSON.CSV 等.另外,还可以保存到数据库中,如关系型数据库 MySQL,非关系 ...

  4. 《Vue3.x +TpyeScript实践指南》勘误

    图书出版已有一段时间,书中已发现错误如下: 书的第14页,倒数第3行,npm init -y命令中,init和-y之间应该有个空格: 书的第32页,代码的第1行,应该为模板字符串符号 `,我看印刷的是 ...

  5. spring多数据源配置笔记

    本文阐述使用多数据源的额场景,以及如何使用springboot的配置多数据源. 关于后者,主要是直接引用其它博文:https://blog.csdn.net/u012060033/article/de ...

  6. 免费的Java主流jdk发行版本有哪些?

    Java的特点是百花齐放,不像c#或者go只有一家主导.oracle jdk收费了,没关系,不是只有它可用.java还有很多免费的主流的jdk发行版本,记录下来备忘. OpenJDK - 官方网站 - ...

  7. Linux 中内核与应用程序的交互方式:netlink

    netlink介绍 一般来说用户空间和内核空间的通信方式有很多种,而Netlink可以实现双工通信. Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应 ...

  8. C++ 史上首次超越 C,Python 第二!

    TIOBE 公布了 2024 年 6 月的编程语言排行榜--C++ 史上首次超越 C,跃至榜二,仅次于 Python. C++ 是一种广泛应用于嵌入式系统.游戏开发和金融交易软件等领域的语言,在本月成 ...

  9. 理解shell

    理解shell shell不单单是CLI,而是一种复杂的交互式程序. 1. shell的类型 当你登录系统时,系统启动什么样的shell程序取决于你的个人用户配置.在/etc/passwd文件中,用户 ...

  10. P9120 题解

    暴力容斥复活之路! \(k=1\) 这个你肯定会. \(k=2\) 大的放上去,小的放下来.简单贪心. \(k=3\) 考虑二分答案. 然后考虑判断是否合法. 令当前答案为 \(val\). 首先钦定 ...