以我的项目GoPick为例

1.命令行启动

执行java文件 直接运行 Ctrl+C 会停止

指定内存和端口

java -Xms512m -Xmx1024m -jar GoPick-0.0.1-SNAPSHOT.jar --server.port=8080

使用外部配置文件

java -jar GoPick-0.0.1-SNAPSHOT.jar --spring.config.location=/path/to/application.yml

指定环境

java -jar GoPick-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

接下来启动项目

文件目录

image-20260531211936008
image-20260531211936008

使用以下命令启动

java -jar GoPick-0.0.1-SNAPSHOT.jar --spring.config.location=./application.yaml

image-20260531212104737
image-20260531212104737

后台运行java文件 慎用 查看启动的进程不方便 当进程多了以后

nohup java -jar GoPick-0.0.1-SNAPSHOT.jar --spring.config.location=./application.yaml > app.log 2>&1 &

查看进程

ps aux | grep GoPick-0.0.1-SNAPSHOT.jar | grep -v grep

pgrep -f "GoPick-0.0.1-SNAPSHOT.jar" | wc -l

查看端口

netstat -tlnp | grep :8080

2.systemctl

使用操作系统进行管理

注意必须在 /etc/systemd/system 下创建

我的文件目录 /etc/systemd/system/go-pick.service

[Unit]
Description=go-pick
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/go-pick
#命令行 将刚刚的启动命令写在这里
ExecStart=/bin/bash -c 'java -Xms512m -Xmx1024m -jar /root/go-pick/GoPick-0.0.1-SNAPSHOT.jar'
#控制什么时候重启
Restart=on-failure
RestartSec=10
#日志输出
StandardOutput=append:/root/go-pick/logs/app.log
StandardError=append:/root/go-pick/logs/error.log
#配置环境变量 如果项目中需要用到环境变量 最好在这里设置
Environment="ALIBABA_CLOUD_ACCESS_KEY_ID=LTAI5t5eStBqUV1v1HL1Tmhf"
Environment="ALIBABA_CLOUD_ACCESS_KEY_SECRET=tgIZ9IW9lKTwINds2Hi1PgcsDGbo1P"
[Install]
WantedBy=multi-user.target

systemctl命令

# 重载配置
sudo systemctl daemon-reload

# 启动/停止/重启
sudo systemctl start go-pick.service
sudo systemctl stop go-pick.service
sudo systemctl restart go-pick.service

# 查看状态和日志
sudo systemctl status go-pick.service
sudo journalctl -u go-pick.service -f

# 开机自启
sudo systemctl enable go-pick.service

修改配置或创建配置以后 使用 sudo systemctl daemon-reload 重载配置才会生效

然后使用 sudo systemctl start go-pick.service 这个启动

image-20260531213107833
image-20260531213107833

3.Shell 脚本管理

方案1的集成 将命令写在脚本文件里 使用脚本启动项目

#!/bin/bash

# ========== 配置区域 ==========
APP_NAME="GoPick-0.0.1-SNAPSHOT.jar"
APP_PATH="/root/go-pick/$APP_NAME"
LOG_DIR="/root/go-pick/logs"
LOG_FILE="$LOG_DIR/app.log"
PID_FILE="/root/go-pick/app.pid"
JAVA_OPTS="-Xms512m -Xmx1024m"
SPRING_CONFIG="--spring.config.location=/root/go-pick/application.yaml"
# =============================

# 确保日志目录存在
mkdir -p "$LOG_DIR"

# 检查应用是否运行
is_running() {
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if ps -p "$PID" > /dev/null 2>&1; then
            return 0
        else
            # PID 文件存在但进程不存在,删除无效的 PID 文件
            rm -f "$PID_FILE"
            return 1
        fi
    fi
    return 1
}

# 启动应用
start() {
    if is_running; then
        echo "❌ 应用已在运行,PID: $(cat $PID_FILE)"
        exit 1
    fi
    
    echo "🚀 正在启动 $APP_NAME ..."
    nohup java $JAVA_OPTS -jar "$APP_PATH" $SPRING_CONFIG > "$LOG_FILE" 2>&1 &
    PID=$!
    echo $PID > "$PID_FILE"
    echo "✅ 启动成功,PID: $PID"
    echo "📝 查看日志: tail -f $LOG_FILE"
}

# 停止应用
stop() {
    if ! is_running; then
        echo "❌ 应用未运行"
        exit 1
    fi
    
    PID=$(cat "$PID_FILE")
    echo "🛑 正在停止应用,PID: $PID"
    kill "$PID"
    
    # 等待进程结束
    for i in {1..10}; do
        if ! ps -p "$PID" > /dev/null 2>&1; then
            break
        fi
        sleep 1
    done
    
    # 如果还没结束,强制杀死
    if ps -p "$PID" > /dev/null 2>&1; then
        echo "⚠️  强制停止进程"
        kill -9 "$PID"
    fi
    
    rm -f "$PID_FILE"
    echo "✅ 已停止"
}

# 重启应用
restart() {
    echo "🔄 重启应用..."
    stop
    sleep 2
    start
}

# 查看状态
status() {
    if is_running; then
        PID=$(cat "$PID_FILE")
        echo "✅ 应用运行中"
        echo "   PID: $PID"
        echo "   内存使用: $(ps -p $PID -o rss= | awk '{printf "%.2f MB", $1/1024}')"
        echo "   运行时间: $(ps -p $PID -o etime= | xargs)"
        echo "   日志文件: $LOG_FILE"
    else
        echo "❌ 应用未运行"
    fi
}

# 查看实时日志
log() {
    if [ -f "$LOG_FILE" ]; then
        tail -f "$LOG_FILE"
    else
        echo "❌ 日志文件不存在: $LOG_FILE"
    fi
}

# 帮助信息
usage() {
    echo "用法: $0 {start|stop|restart|status|log}"
    echo ""
    echo "命令说明:"
    echo "  start    - 启动应用"
    echo "  stop     - 停止应用"
    echo "  restart  - 重启应用"
    echo "  status   - 查看状态"
    echo "  log      - 查看实时日志"
}

# 主逻辑
case "$1" in
    start)   start ;;
    stop)    stop ;;
    restart) restart ;;
    status)  status ;;
    log)     log ;;
    *)       usage ;;
esac

文件目录

image-20260531213347920
image-20260531213347920

使用文件之前需要为文件添加执行权限 使用chmod +x go-pick.sh 添加执行权限

使用文件

image-20260531213452478
image-20260531213452478