java spring 启动脚本_spring boot 启动脚本开发

dac9e6eaa07940eaab98be140c488932.png

#!/bin/bash

## blog:www.jxlgzwh.com

## create 2019-06-20

version="1.0.0";

appName=$2

if [ -z $appName ];then

appName=`ls -t |grep .jar$ |head -n1`

fi

## 后台启动项目 自动生成 catalina.log日志文件

function start()

{

count=`ps -ef |grep java|grep $appName|wc -l`

if [ $count != 0 ];then

echo "Maybe $appName is running, please check it..."

else

echo "The $appName is starting..."

nohup java -jar ./$appName -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms512M -Xmx4G > catalina.log 2>&1 &

fi

}

## 停止项目

function stop()

{

appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`

if [ -z $appId ];then

echo "Maybe $appName not running, please check it..."

else

echo "The $appName is stopping..."

kill $appId

fi

}

##重启项目(平滑启动)

function restart()

{

# get release version

releaseApp=`ls -t |grep .jar$ |head -n1`

# get last version

lastVersionApp=`ls -t |grep .jar$ |head -n2 |tail -n1`

appName=$lastVersionApp

stop

for i in {5..1}

do

echo -n "$i "

sleep 1

done

echo 0

backup

appName=$releaseApp

start

}

function backup()

{

# get backup version

backupApp=`ls |grep -wv $releaseApp$ |grep .jar$`

# create backup dir

if [ ! -d "backup" ];then

mkdir backup

fi

# backup

for i in ${backupApp[@]}

do

echo "backup" $i

mv $i backup

done

}

## 查看项目当前状态

function status()

{

appId=`ps -ef |grep java|grep $appName|awk '{print $2}'`

if [ -z $appId ]

then

echo -e "\033[31m Not running \033[0m"

else

echo -e "\033[32m Running [$appId] \033[0m"

fi

}

function usage()

{

echo "Usage: $0 {start|stop|restart|status|stop -f}"

echo "Example: $0 start"

exit 1

}

case $1 in

start)

start;;

stop)

stop;;

restart)

restart;;

status)

status;;

*)

usage;;

esac

./test-portal.jar中没有主清单属性

使用idea2018打包了一个spring boot项目(打包为jar)

启动是报错如下:

错误原因

打包后的jar文件中的MANIFEST.MF缺少项目启动项,即没有Main-Class和Start-Class

如下:

解决方案如下

指定MANIFEST.MF路径

项目打包前

第一步 file–>project structure 弹框后选中Atifacts—> + ---->jar---->from module with dependenceis

第二步 选择一个Main Class,然后指定META-INF/MANIFEST.MF的路径为src下(注意不要放到main/java目录下,否则打成的jar中META-INF/MANIFEST.MF不含有Main-Class信息)

如果这个方案不行,那就很有可能是另一个原因

项目pom.xml文件中没有添加插件spring-boot-maven-plugin

成功结果

如果看到上面红框内容就证明没问题了

b43f7d6fd0b339957b2a699b20ec6238.png

脚本使用方式

./spring-boot.sh start xxx-portal.jar

./spring-boot.sh stop xxx-portal.jar

./spring-boot.sh status xxx-portal.jar

./spring-boot.sh restart xx-portal.jar

maven-assembly-plugin

3.0.0

src/main/assembly/assembly.xml

make-assembly

package

single

org.apache.maven.plugins

maven-compiler-plugin

3.6.0

1.8

1.8

UTF-8

org.springframework.boot

spring-boot-maven-plugin

xxx-portal

使用 assembly 插件开发

1.0

tar.gz

src/main/assembly/bin

0755

src/main/resources

config

0755

*.yml

target

*.jar

src/main/resources

doc

0755

**/*

方式二:部署为Unix/Linux Service

该方式主要借助官方的spring-boot-maven-plugin创建"Fully executable" jar ,这中jar包内置一个shell脚本,可以方便的将该应用设置为Unix/Linux的系统服务(init.d service),官方对该功能在CentOS和Ubuntu进行了测试,对于OS X和FreeBSD,可能需要自定义。具体步骤如下:

1. 在pom.xml中引入插件:

org.springframework.boot

spring-boot-maven-plugin

true

2. 设置为系统服务

将你的应用打成jar包,部署到服务器,假设部署路径为/var/app,包名为app.jar,通过如下方式将应该设置为一个系统服务:

sudo ln -s /var/app/app.jar /etc/init.d/app

3. 赋予可执行权限:

chmod u+x app.jar

4. 以系统服务的方式管理

接下来,就可以使用我们熟悉的service foo start|stop|restart来对应用进行启停等管理了

sudo service app start|stop

命令将得到形如Started|Stopped [PID]的结果反馈

默认PID文件路径:/var/run/appname/appname.pid

默认日志文件路径:/var/log/appname.log

这可能是我们更熟悉也更常用的管理方式。

自定义参数

在这种方式下,我们还可以使用自定义的.conf文件来变更默认配置,方法如下:

在jar包相同路径下创建一个.conf文件,名称应该与.jar的名称相同,如appname.conf

在其中配置相关变量,如:

JAVA_HOME=/usr/local/jdk

JAVA_OPTS=-Xmx1024M

LOG_FOLDER=/custom/log

安全设置

作为应用服务,安全性是一个不能忽略的问题,如下一些操作可以作为部分基础设置参考:

为服务创建一个独立的用户,同时最好将该用户的shell绑定为/usr/sbin/nologin

赋予最小范围权限:chmod 500 app.jar

阻止修改:sudo chattr +i app.jar

对.conf文件做类似的工作:chmod 400 app.conf,sudo chown root:root app.conf

参考资料

开机自启动脚本 可以参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值