CentOS7 系统 springboot应用启动脚本
最近在部署Springboot应用时,需要设置启动脚本,编写调试完成,记之如下:
启动脚本:
#!/bin/bash APP_NAME=dataservice-engine JAR_NAME=dataservice-engine-0.0.1-SNAPSHOT.jar PID=$APP_NAME\.pid PROJ_HOME=$(pwd) # jar包路径 APP_HOME=$PROJ_HOME LOG_PATH=$PROJ_HOME/logs # 创建log路径 if [ ! -d $LOG_PATH ]; then mkdir $LOG_PATH fi # GC日志参数 GC_LOG_OPTS=" -XX:+PrintGC -XX:+PrintGCDetails -Xloggc:$LOG_PATH/gc-%t.log" # GC收集器参数 GC_OPTS="-XX:+UseConcMarkSweepGC" # JVM 启动参数 JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xss256k -XX:SurvivorRatio=8 $GC_OPTS $GC_LOG_OPTS " # 使用说明,用来提示输入参数 usage() { echo "Usage: dataservice-engine.sh [start|stop|restart|status]" echo "start: start dataservice engine service" echo "stop: stop dataservice engine service" echo "status: show dataservice engine state" echo "restart: restart dataservice engine service" exit 1 } # 检查程序是否在运行 is_exist() { pid=$(ps -ef | grep $APP_HOME/$JAR_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 "WARN: $APP_NAME is already running PID=${pid}" else echo "JVM_OPTIONS : " echo $JVM_OPTIONS | sed 's/ /\n/g ' nohup java -jar $JVM_OPTIONS $APP_HOME/$JAR_NAME >>$LOG_PATH/stdout.log 2>&1 & echo $! >$PID echo "INFO: start $APP_NAME successed PID=$!" fi } # 停止方法 stop() { #is_exist pidf=$(cat $PID) echo "INFO: app PID = $pidf begin kill $pidf" kill "$pidf" rm -rf $PID sleep 2 is_exist if [ $? -eq "0" ]; then echo "INFO: app 2 PID = ${pid} begin kill -9 ${pid}" echo "INFO: Stopping $APP_NAME ..." kill -9 ${pid} sleep 2 echo "INFO: $APP_NAME process stopped ---" else echo "INFO: $APP_NAME is not running ---" fi } # 输出运行状态 status() { is_exist if [ $? -eq "0" ]; then echo "INFO: $APP_NAME is running PID is $pid" else echo "WARN: $APP_NAME is not running" fi } # 重启 restart() { stop start } case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac exit 0
借助上面的脚本文件,将启动应用加入 systemctl 中:
创建 dataservice-engine.service文件:
[Unit] Description=dataservice-engine After=network.target [Service] Type=forking User=root WorkingDirectory=/usr/local/dataservice-engine ExecStart=/bin/bash /usr/local/dataservice-engine/dataservice-engine.sh start ExecStop=/bin/bash /usr/local/dataservice-engine/dataservice-engine.sh stop Restart=on-failure [Install] WantedBy=multi-user.target
将dataservice-engine.service文件,移动至 /etc/systemd/system/ 路径下,执行以下命令,就可以将服务添加至systemctl 管理:
# chmod 754 dataservice-engine,service
标签:
SpringBoot
, Linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?