自动化部署脚本

说明:这个脚本主要是我部署java项目时:解压war包、停止服务、启动服务、查看日志、日志分割等常用命令,给他写成shell脚本了。

使用方法:

一般服务器都自带bash,该shell脚本通过bash执行。所以只需要把该脚本拉入到服务器,给脚本执行权限:

执行,输入需要的数字即可:

脚本代码内容如下:

bash 复制代码
#!/bin/bash

# 定义颜色代码变量
RED='\033[1;31m'    # 红色-用于强调操作提示
GREEN='\033[1;32m'  # 绿色-用于成功提示
BLUE='\033[1;34m'   # 蓝色-用于菜单标题
CYAN='\033[1;36m'   # 青色-用于步骤说明
NC='\033[0m'        # 重置颜色

# 全局变量定义
TW_HOME="/home/hcf/TongWeb7.0"  # TongWeb主目录
APP_HOME="/home/hcf/APP"        # 应用部署目录
LOG_FILE="${TW_HOME}/logs/server.log" # 日志文件路径

# 显示彩色标题函数
show_header() {
  clear
  echo -e "${BLUE}#***************XX项目的TongWeb 服务管理脚本 (端口:9060) ***************#${NC}"
}

# 显示菜单函数
show_menu() {
  echo -e "${CYAN}"
  echo "0. 检查TongWeb状态"
  echo "1. 启动TongWeb服务"
  echo "2. 停止TongWeb服务"
  echo "3. 重启TongWeb服务"
  echo "4. 查看实时日志"
  echo "44. 查看最近1000条日志"
  echo "5. 编辑配置文件"
  echo "6. 日志文件分割"
  echo "7. 进入APP目录"
  echo "8. 删除hcf应用"
  echo "9. 解压hcf.war包"
  echo -e "${NC}"
  echo -e "${GREEN}请输入操作编号: ${NC}\c"
}

# 获取TongWeb进程ID
get_pid() {
  ps -ef | grep tongweb | grep "${TW_HOME}" | grep -v auto | awk '{print $2}'
}

# 主程序开始
show_header
show_menu

read choice             #执行脚本后,输入的值
pid=$(get_pid)          # 获取当前启动的tongweb进程ID
timestamp=$(date +%Y%m%d%H%M) # 时间戳用于日志分割

case $choice in
  0) # 检查服务状态
    if [ -n "$pid" ]; then
      echo -e "${GREEN}✔ TongWeb正在运行 (PID: $pid)${NC}"
    else
      echo -e "${RED}✖ TongWeb未运行${NC}"
    fi
    ;;

  1) # 启动服务
    echo -e "${CYAN}▶ 正在启动TongWeb...${NC}"
    cd "${TW_HOME}/bin" || exit 1
    ./startservernohup.sh
    echo -e "${GREEN}✔ 已启动,开始跟踪日志...${NC}"
    tail -f "$LOG_FILE"
    ;;

  2) # 停止服务
    echo -e "${CYAN}■ 正在停止TongWeb...${NC}"
    if [ -n "$pid" ]; then
      "${TW_HOME}/bin/stopserver.sh"
      echo -e "${GREEN}✔ 已发送停止指令${NC}"
    else
      echo -e "${RED}✖ 服务未运行,无需停止${NC}"
    fi
    ;;

  3) # 重启服务
    echo -e "${CYAN}↻ 正在重启TongWeb...${NC}"
    [ -n "$pid" ] && kill -9 "$pid"
    cd "${TW_HOME}/bin" || exit 1
    ./startservernohup.sh
    ;;

  4) # 实时日志
    echo -e "${CYAN}📜 进入实时日志模式 (Ctrl+C退出)...${NC}"
    tail -f "$LOG_FILE"
    ;;

  44) # 查看最近日志
    tail -n 1000 "$LOG_FILE"
    echo -e "${CYAN}📄 最近1000条日志内容如上:${NC}"
    ;;

  5) # 编辑配置
    vi "${APP_HOME}/hcf/WEB-INF/classes/application-prod.yml"
    ;;

  6) # 日志分割
    echo -e "${CYAN}✂ 正在分割日志...${NC}"
    cp "$LOG_FILE" "${TW_HOME}/logs/server_${timestamp}.log"
    > "$LOG_FILE"
    echo -e "${GREEN}✔ 日志已归档并清空当前日志${NC}"
    ;;

  7) # 进入APP目录
    cd "$APP_HOME" || exit 1
    echo -e "${GREEN}✔ 已进入应用目录: $(pwd)${NC}"
    ;;

  8) # 删除应用
    rm -rf "${APP_HOME}/hcf" "${APP_HOME}/hcf.war"
    echo -e "${GREEN}✔ 已删除hcf应用文件${NC}"
    ;;

  9) # 解压war包
    cd "$APP_HOME" || exit 1
    unzip -d hcf hcf.war
    echo -e "${GREEN}✔ 解压完成,文件保存在hcf目录${NC}"
    ;;

  *)
    echo -e "${RED}⚠ 无效的输入,请重新运行脚本选择有效编号${NC}"
    ;;
esac
相关推荐
大爱编程♡4 分钟前
Linux C 语言文件 IO 与构建工具实战指南
linux·服务器
yyuuuzz30 分钟前
企业出海云服务器部署踩坑记录:从频繁超时到稳定运行的复盘
运维·服务器·网络·人工智能·aws
科技研学社38 分钟前
服装后道自动化选型|五大品牌全自动激光开袋机深度对比分析报告
运维·自动化
Linux运维技术栈1 小时前
深度拆解 Linux logrotate 重复切割问题:根因、排查与生产级根治方案
linux·logrotate
ouynagda1 小时前
Linux多线程:互斥锁与信号量学习笔记
linux·笔记·学习
星辰徐哥1 小时前
打破社媒营销信息差:具身交互智能打造全自动化KOL情报体系
运维·python·自动化·交互·react·数字人
重生之我是Java开发战士1 小时前
【Java EE】认识Linux与项目部署
java·linux·java-ee
EasyGBS1 小时前
连锁书店如何用国标GB28181公网平台EasyGBS把“远程巡店”做成日常基本功?
服务器·网络·音视频
Tisfy2 小时前
LeetCode 3720.大于目标字符串的最小字典序排列:状态机 —— :从左往右枚举,失败则退回(最多退回一次)
linux·数据库·leetcode·字符串·状态机·构造
SKH.2 小时前
Linux软件编程(5)线程
java·linux·jvm