#!/bin/bash ############################################ # 通用Jar管理脚本 v1.0 ############################################ APP_NAME="app-service" PORT="8080" BASE_DIR=$(cd "$(dirname "$0")"; pwd) RELEASE_DIR="$BASE_DIR/releases" LOG_DIR="$BASE_DIR/logs" CURRENT_JAR="$BASE_DIR/current.jar" SYSTEMD_FILE="/etc/systemd/system/${APP_NAME}.service" JAVA_CMD=$(which java) ############################################ mkdir -p $RELEASE_DIR mkdir -p $LOG_DIR ############################################ get_pid() { PID=$(ps -ef | grep "current.jar" | grep -v grep | awk '{print $2}') } ############################################ start_app() { get_pid if [ -n "$PID" ]; then echo "服务已运行 PID=$PID" return fi echo "启动服务..." nohup $JAVA_CMD -jar $CURRENT_JAR > $LOG_DIR/app.log 2>&1 & sleep 2 get_pid if [ -n "$PID" ]; then echo "启动成功 PID=$PID" else echo "启动失败" fi } ############################################ stop_app() { get_pid if [ -z "$PID" ]; then echo "服务未运行" return fi echo "停止服务 PID=$PID" kill $PID sleep 2 get_pid if [ -n "$PID" ]; then echo "强制停止" kill -9 $PID fi echo "停止完成" } ############################################ restart_app() { stop_app sleep 2 start_app } ############################################ status_app() { get_pid if [ -n "$PID" ]; then echo "运行中 PID=$PID" else echo "未运行" fi echo "" echo "端口检测..." lsof -i:$PORT } ############################################ view_log() { tail -f $LOG_DIR/app.log } ############################################ publish_version() { echo "输入jar文件路径:" read JAR_PATH if [ ! -f "$JAR_PATH" ]; then echo "文件不存在" return fi JAR_NAME=$(basename $JAR_PATH) cp $JAR_PATH $RELEASE_DIR/ ln -sf $RELEASE_DIR/$JAR_NAME $CURRENT_JAR echo "发布版本: $JAR_NAME" restart_app clean_old } ############################################ rollback_version() { echo "历史版本:" ls -t $RELEASE_DIR echo "输入要回滚的jar名称:" read JAR_NAME if [ ! -f "$RELEASE_DIR/$JAR_NAME" ]; then echo "版本不存在" return fi ln -sf $RELEASE_DIR/$JAR_NAME $CURRENT_JAR restart_app echo "已回滚: $JAR_NAME" } ############################################ list_versions() { ls -lt $RELEASE_DIR } ############################################ clean_old() { echo "清理旧版本..." ls -t $RELEASE_DIR/*.jar | tail -n +11 | xargs rm -f } ############################################ install_systemd() { echo "安装systemd服务..." cat > $SYSTEMD_FILE <