You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用部署为Ubuntu System V Init服务启动报错求助

问题根源分析

你遇到的语法错误核心原因是:直接把Spring Boot的jar文件软链接到/etc/init.d目录是完全错误的操作。/etc/init.d下的文件必须是符合System V init规范的shell脚本,而不是可执行的jar包——系统会把这个jar当成shell脚本去解析,jar的二进制内容在shell看来就是乱码的脚本代码,自然会出现"引号未终止"这类语法错误。

正确的解决步骤

下面是配置System V init启动Spring Boot应用的完整流程:

1. 创建System V启动脚本

在/etc/init.d目录下创建一个简洁命名的脚本(建议用my-app代替带版本号的名称,方便后续维护):

sudo nano /etc/init.d/my-app

将以下内容粘贴进去,根据你的实际环境修改JAVA_HOME、JAR_PATH等参数:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          my-app
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/Stop My Spring Boot Application
# Description:       Manages the My Spring Boot Application service
### END INIT INFO

# 配置应用参数
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 替换成你的Java实际安装路径
JAR_PATH=/var/my-app/my-app-0.0.1-SNAPSHOT.jar
PID_FILE=/var/run/my-app.pid
LOG_FILE=/var/log/my-app.log

start() {
    if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE); then
        echo "My App is already running..."
        return 1
    fi
    echo "Starting My App..."
    nohup $JAVA_HOME/bin/java -jar $JAR_PATH > $LOG_FILE 2>&1 &
    echo $! > $PID_FILE
    echo "My App started successfully with PID $(cat $PID_FILE)"
}

stop() {
    if [ ! -f $PID_FILE ] || ! kill -0 $(cat $PID_FILE); then
        echo "My App is not running..."
        return 1
    fi
    echo "Stopping My App..."
    kill $(cat $PID_FILE)
    rm $PID_FILE
    echo "My App stopped successfully"
}

restart() {
    stop
    start
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE); then
            echo "My App is running with PID $(cat $PID_FILE)"
        else
            echo "My App is not running"
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac

exit 0

2. 设置脚本可执行权限

执行命令给脚本添加可执行权限:

sudo chmod +x /etc/init.d/my-app

3. 注册服务到System V init

执行以下命令将脚本注册为系统服务,使其支持开机自动启动:

sudo update-rc.d my-app defaults

4. 测试服务启停

现在你可以用service命令正常管理你的应用了:

# 启动服务
sudo service my-app start

# 查看运行状态
sudo service my-app status

# 停止服务
sudo service my-app stop

# 重启服务
sudo service my-app restart
额外提示
  • 后续更新jar包时,只需要替换/var/my-app下的jar文件,再执行sudo service my-app restart即可,无需修改启动脚本。
  • 日志文件/var/log/my-app.log可以帮助你排查应用启动或运行中的异常问题。

内容的提问来源于stack exchange,提问作者kovac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:04:48