可以去看这篇文章:搭建一个SpringBoot项目
<build>
<finalName>popularizefinalName>
<resources>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.xmlinclude>
<include>**/*.propertiesinclude>
<include>**/*.yamlinclude>
<include>**/*.ymlinclude>
includes>
<filtering>truefiltering>
resource>
resources>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
exclude>
excludes>
configuration>
plugin>
plugins>
build>
<profiles>
<profile>
<id>sitid>
<properties>
<profiles.active>sitprofiles.active>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>prdid>
<properties>
<profiles.active>prdprofiles.active>
properties>
profile>
profiles>
spring:
profiles:
active: @profiles.active@
**
**
#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=popularize.jar
#项目路径
PROJECT_PATH=/popularize
#项目环境,比如我的是开发环境是sit,生成环境是prd
ENV=prd
#使用说明,用来提示输入参数
usage() {
echo "使用方法: 脚本名.sh [start|stop|restart|status]"
echo "使用方法: ./脚本名.sh start 是启动"
echo "使用方法: ./脚本名.sh stop 是停止"
echo "使用方法: ./脚本名.sh status 是查看输出运行状态"
echo "使用方法: ./脚本名.sh restart 是重启"
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 -Dspring.profiles.active=$ENV -jar $PROJECT_PATH/$APP_NAME > /dev/null 2>&1 &
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
chmod 744 springjar.sh
./jar.sh start
./jar.sh stop
./jar.sh restart
./jar.sh status
./jar.sh
后面的参数,根据参数不同进入不同的方法# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
如果在当前目录下执行:./jar.sh
后面不带参数,或者不是 start|stop|restart|status
的任意值
#使用说明,用来提示输入参数
usage() {
echo "使用方法: ./脚本名.sh [start|stop|restart|status]"
echo "使用方法: ./脚本名.sh start 是启动"
echo "使用方法: ./脚本名.sh stop 是停止"
echo "使用方法: ./脚本名.sh status 是查看输出运行状态"
echo "使用方法: ./脚本名.sh restart 是重启"
exit 1
}
会执行usage方法,在控制台打印,如下
使用方法: ./脚本名.sh [start|stop|restart|status]
使用方法: ./脚本名.sh start 是启动
使用方法: ./脚本名.sh stop 是停止
使用方法: ./脚本名.sh status 是查看输出运行状态
使用方法: ./脚本名.sh restart 是重启
检查程序是否在运行,每个方法都会调用此方法
项目启动了,会把项目的进程号赋给pid
变量,返回0,项目没启动pid
为空,返回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
}
先查看is_exist
方法返回是0吗,如果是就啥也不操作,如果不是0,则后台启动java项目
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
# echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -Dspring.profiles.active=$ENV -jar $PROJECT_PATH/$APP_NAME > /dev/null 2>&1 &
echo "${APP_NAME} start success"
fi
}
nohup java -Dspring.profiles.active=$ENV -jar $PROJECT_PATH/$APP_NAME
nohup java -Dspring.profiles.active=$ENV -jar $PROJECT_PATH/$APP_NAME
根据文件最上面的项目地址、项目名和项目环境,后台(nohup
)启动 jar
包,并且环境配置为prd
(–-spring.profiles.active=$ENV
),
> /dev/null 2>&1
> /dev/null 2>&1 &
# 最基本后台启动的jar包启动可以这样启动,现在就是把 > log.log & 变成了 > /dev/null 2>&1 &
nohup java -jar xxx.jar > log.log &
最基础的启动,jar包会把日志加载到当前目录下的log.log
文件中,而> /dev/null 2>&1
就是说把正确或是错误的日志全扔掉,我们的项目中有logback.xml
文件,他会自己把普通或错误的日志都输出到指定的文件中,我们不需要管
这里也就是将所有产生的日志都丢弃,因为我们项目中logback.xml
已经指定了日志的格式和输出位置。
主要讲讲
> /dev/null 2>&1
通常情况下,总是有三个文件会被打开。它们各自对应的流:
0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr>:将流输出到文件
同:1 >,默认情况下就是1,即标准输出,一般都省略。
/dev/null:这个文件是一个无底洞,无法打开,相当于是一个垃圾站。
也就是将所有产生的日志都丢弃,因为我们项目中logback.xml已经指定了日志的格式和输出位置。
2>&1:代表将标准错误2重定向到标准输出1
标准输出和标准错误都输出到/dev/null。如果是2>1的话,代表将标准错误输出到文件1,而不是重定向到标准输出流。
根据is_exist
方法拿到项目的进程号后,结束掉就好了
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
根据is_exist
方法,看是否存在,存在输出 ”项目名 is running. Pid is 进程号 “ ,不存在输出 “项目名 is NOT running.”
#输出运行状态
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
}