将脚本 spring-app.sh(可以自定义名称) 和应用程序 spring-app.jar (根据实际而定,脚本会自动找到当前目录下的Jar包:*.jar)放在同一目录下。
chmod +x spring-app.sh
./spring-app.sh start查看服务状态
./spring-app.sh status
以上命令运行结果:
$ ./spring-app.sh start
2025-04-01 18:04:07 [INFO] 启动 spring-app...
2025-04-01 18:04:07 [INFO] spring-app 启动成功 (PID: 44452)
$ ./spring-app.sh status
2025-04-01 18:04:36 [INFO] spring-app 正在运行 (PID: 44452)
2025-04-01 18:04:36 [INFO] spring-app 运行命令: (CMD: /usr/local/software/jdk21/bin/java -jar -server /home/admin/java/spring-app.jar)
如果需要定义Java&Spring的启动参数、日志、健康监测、优雅关闭等,可以参考高级配置
设置java路径
export JAVA_HOME=/usr/local/software/jdk21设置应用程序全路径
export SPRINGBOOT_JAR_PATH="/data/service/application/spring-app.jar"设置JVM参数
export JVM_OPTS="-jar -server -Xms512m -Xmx1024m"设置Spring Boot应用参数
export SPRING_OPTS="--spring.profiles.active=prod"日志功能
启用日志功能
export LOG_ENABLED=true设置清理日志保留的日期
export LOG_RETENTION_DAYS=7健康监测
选择以下一种方式:
不设置健康检查
export HEALTH_CHECK_METHOD=none日志检查关键字
export HEALTH_CHECK_METHOD=log
export LOG_KEYWORD="JVM running for"TCP端口检查
export HEALTH_CHECK_METHOD=tcp
export HEALTH_CHECK_TCP_PORT=8888URL检查
export HEALTH_CHECK_METHOD=url
export HEALTH_CHECK_URL="http://localhost:8888/actuator/health"优雅关闭
等待程序自动退出最大时间(秒)
export GRACEFUL_SHUTDOWN_TIMEOUT=60以上自定义配置后重启服务生效
./spring-app.sh restart查看运行状态
./spring-app.sh status
相关路径和文件请自行修改并调试
编辑环境变量配置文件
必填的参数:Jar应用的路径
注意这样使用的事 cat > xx <<EOF EOF的方式,目的是将当前用户的环境变量
$PATH写入该配置文件中
cat > /data/service/application/spring-app.env <<EOF
# 必填
SPRINGBOOT_JAR_PATH="/data/service/application/spring-app.jar"
# 选填
JAVA_HOME=/usr/local/software/jdk21
JVM_OPTS="-jar -server -Xms512m -Xmx4096m"
SPRING_OPTS="--spring.profiles.active=prod"
LOG_ENABLED="false"
LOG_RETENTION_DAYS=7
HEALTH_CHECK_METHOD="none"
LOG_KEYWORD="JVM running for"
HEALTH_CHECK_TCP_PORT=8888
HEALTH_CHECK_URL="http://localhost:8888/actuator/health"
GRACEFUL_SHUTDOWN_TIMEOUT=60
PATH=$PATH
EOF编辑systemd配置文件
sudo tee /etc/systemd/system/spring-app.service <<"EOF"
[Unit]
Description=My Spring Boot Application Manager
After=network.target
[Service]
Type=forking
User=admin
Group=ateng
PrivateTmp=true
WorkingDirectory=/data/service/application
EnvironmentFile=-/data/service/application/spring-app.env
ExecStartPre=/data/service/application/spring-app.sh status
ExecStart=/data/service/application/spring-app.sh start
ExecStop=/data/service/application/spring-app.sh stop
Restart=on-failure
RestartSec=30
TimeoutStartSec=90
TimeoutStopSec=120
StartLimitIntervalSec=600
StartLimitBurst=3
KillMode=control-group
KillSignal=SIGTERM
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
EOF启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now spring-app查看状态
sudo systemctl status spring-app查看日志
sudo journalctl -f -u spring-app编辑systemd配置文件
根据实际情况修改 ExecStart 参数
sudo tee /etc/systemd/system/spring-app.service <<"EOF"
[Unit]
Description=Spring Boot Application Manager
After=network.target
[Service]
Type=simple
User=admin
Group=ateng
PrivateTmp=true
WorkingDirectory=/data/service/application
ExecStart=/usr/local/software/jdk21/bin/java \
-jar -server \
-Xms512m -Xmx4096m \
/data/service/application/spring-app.jar \
--spring.profiles.active=prod
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
RestartSec=30
TimeoutStartSec=90
TimeoutStopSec=120
StartLimitIntervalSec=600
StartLimitBurst=3
KillMode=control-group
KillSignal=SIGTERM
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
EOF启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now spring-app查看状态
sudo systemctl status spring-app查看日志
sudo journalctl -f -u spring-app