背景:以前启动jar包都是通过java -jar,后面了解到一种注册服务式启动jar包的方式,所以做个记录。
注意:我在写该篇博客的时候,给脚本代码都加了#注释来解释该行脚本命令的意思,所以可能出现复制该篇博客脚本代码后启动不了的问题(把#和一些不应该有的空格去掉应该就可以了,有问题可以评论滴我。)
我们项目的目录是这样:
/opt/webapps/financing/financing-api 在这个目录下有如下配置。
接下来开始讲怎么通过systemctl启动springboot服务启动
1、首先进入centos /etc/systemd/system/目录
cd /etc/systemd/system/
2、新建一个springboot项目名.servie文件(我这里是financing-api项目,所以新建financing-api.service文件)
financing-api.service内容如下
[Unit] #定义了服务的名称、描述、依赖关系等信息。
Description=financing-api server
After=network.target remote-fs.target nss-lookup.target
[Service] #定义了服务的类型、用户、工作目录、启动命令等信息。
Type=forking
User=root
EnvironmentFile=/opt/webapps/financing/financing-api/config/financing-api.env #一定要有该env配置。具体env的目录根据自己服务器实际部署情况来修改。
WorkingDirectory=/opt/webapps/financing/financing-api #
ExecStartPre=/bin/sh -c 'if [ ! -d ${LOG_PATH} ]; then mkdir ${LOG_PATH}; fi'。#定义了在启动服务之前要执行的命令。
ExecStart=/bin/sh -c '${JAVA_HOME}/java ${JVM_OPTIONS} -jar -Dloader.path=${APP_HOME}/lib ${REMOTE_DEBUG_OPTS} ${APP_HOME}/${JAR_NAME} > /dev/null 2>&1 &' #定义了启动服务的命令。
ExecReload=/bin/kill -s HUP $MAINPID #定义了重启服务的命令
ExecStop=/bin/kill -s QUIT $MAINPID #定义了停止服务的命令
[Install]
WantedBy=multi-user.target #定义了服务的启动方式。
3、进入env所在的目录,配置一个financing-api.env文件
financing-api.env内容如下
JAR_NAME=financing-core-1.0.0.jar #指定jar包名
PROFILE=dev #指定配置文件的模式
PROJ_HOME=/opt/webapps/financing/financing-api #项目目录
APP_HOME=$PROJ_HOME
LOG_PATH=$PROJ_HOME/logs #日志目录
GC_LOG_OPTS="-XX:+PrintGC -XX:+PrintGCDetails -Xloggc:/opt/webapps/financing/financing-api/logs/gc.log"#垃圾回收日志文件
GC_OPTS=-XX:+UseG1GC #垃圾回收类型
REMOTE_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 #远程断点配置 默认5005
OTHER_OPTS=-Dspring.profiles.active=dev #指定jar包启动的配置文件
JVM_OPTIONS="-server -Xms512m -Xmx512m $GC_OPTS $GC_LOG_OPTS $OTHER_OPTS" #这里的xms 和xmx根据自己服务器实际情况配置
JAVA_HOME=/usr/install/java/bin #服务器上java_home的目录
4、部署启动脚本 start.sh,一般在jar包同目录
#!/usr/bin/env bash
# 执行前需要加可执行权限: chmod +x restart.sh
systemctl restart financing-api
echo "financing-api服务重启完成."
tail -200f logs/log_info.log
5、执行启动脚本即可通过 systemctl命令启动springboot服务