#!/bin/bash # ============================================================================== # 风七六平台 - 阿里云服务器状态检查与清理脚本 # 符合大厂标准的服务器运维工具 # ============================================================================== set -e # 配置常量 WORK_DIR="/opt/Fzxpodman" BACKUP_DIR="$WORK_DIR/backup" LOG_DIR="$WORK_DIR/infrastructure/logs" COMPOSE_FILE="$WORK_DIR/infrastructure/compose/podman-compose.aliyun-dev.yml" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' CYAN='\033[0;36m' NC='\033[0m' # 输出函数 print_color() { local color=$1 local message=$2 echo -e "${color}${message}${NC}" } print_section() { echo "" print_color "$CYAN" "========================================" print_color "$CYAN" "$1" print_color "$CYAN" "========================================" } # 检查服务器状态 check_server_status() { print_section "1. 服务器基础状态检查" print_color "$YELLOW" "CPU 使用率:" top -bn1 | head -5 print_color "$YELLOW" "\n内存使用:" free -h print_color "$YELLOW" "\n磁盘空间:" df -h print_color "$YELLOW" "\n网络连接:" ss -tuln | head -20 } # 检查工作目录结构 check_work_directory() { print_section "2. 工作目录结构检查" print_color "$YELLOW" "工作目录内容:" ls -la "$WORK_DIR" print_color "$YELLOW" "\n服务目录结构:" ls -la "$WORK_DIR/services/" | head -15 print_color "$YELLOW" "\n基础设施目录:" ls -la "$WORK_DIR/infrastructure/" } # 检查容器状态 check_containers() { print_section "3. 容器运行状态检查" print_color "$YELLOW" "运行中的容器:" podman ps print_color "$YELLOW" "\n所有容器(包括已停止):" podman ps -a print_color "$YELLOW" "\n容器资源使用:" podman stats --no-stream } # 检查镜像状态 check_images() { print_section "4. 镜像状态检查" print_color "$YELLOW" "本地镜像列表:" podman images print_color "$YELLOW" "\n悬空镜像(未被使用的镜像):" dangling=$(podman images -f "dangling=true" -q) if [ -n "$dangling" ]; then podman images -f "dangling=true" else print_color "$GREEN" "无悬空镜像" fi } # 检查网络配置 check_network() { print_section "5. 网络配置检查" print_color "$YELLOW" "自定义网络状态:" podman network ls print_color "$YELLOW" "\nfzx-aliyun-dev-network 详情:" podman network inspect fzx-aliyun-dev-network 2>/dev/null || print_color "$RED" "网络不存在" } # 检查日志文件 check_logs() { print_section "6. 日志文件检查" print_color "$YELLOW" "日志目录内容:" ls -la "$LOG_DIR" 2>/dev/null || print_color "$RED" "日志目录不存在" if [ -d "$LOG_DIR" ]; then print_color "$YELLOW" "\n日志文件大小:" du -sh "$LOG_DIR"/* 2>/dev/null | head -20 fi } # 清理悬空镜像 cleanup_dangling_images() { print_section "7. 清理悬空镜像" dangling=$(podman images -f "dangling=true" -q) if [ -n "$dangling" ]; then print_color "$YELLOW" "正在删除悬空镜像..." podman rmi -f $dangling print_color "$GREEN" "悬空镜像清理完成" else print_color "$GREEN" "无悬空镜像需要清理" fi } # 清理旧日志 cleanup_old_logs() { print_section "8. 清理旧日志文件" if [ -d "$LOG_DIR" ]; then print_color "$YELLOW" "查找超过7天的日志文件..." old_logs=$(find "$LOG_DIR" -name "*.log" -type f -mtime +7) if [ -n "$old_logs" ]; then echo "$old_logs" print_color "$YELLOW" "\n正在删除旧日志..." find "$LOG_DIR" -name "*.log" -type f -mtime +7 -delete print_color "$GREEN" "旧日志清理完成" else print_color "$GREEN" "无超过7天的日志文件" fi else print_color "$YELLOW" "日志目录不存在,跳过" fi } # 清理未使用的容器 cleanup_stopped_containers() { print_section "9. 清理已停止的容器" stopped=$(podman ps -a -f "status=exited" -q) if [ -n "$stopped" ]; then print_color "$YELLOW" "已停止的容器列表:" podman ps -a -f "status=exited" print_color "$YELLOW" "\n正在删除已停止的容器..." podman rm $stopped print_color "$GREEN" "已停止容器清理完成" else print_color "$GREEN" "无已停止的容器需要清理" fi } # 清理未使用的卷 cleanup_unused_volumes() { print_section "10. 清理未使用的卷" unused=$(podman volume ls -q) if [ -n "$unused" ]; then print_color "$YELLOW" "检查未使用的卷..." podman volume prune -f print_color "$GREEN" "未使用卷清理完成" else print_color "$GREEN" "无卷需要清理" fi } # 备份配置文件 backup_configs() { print_section "11. 备份关键配置文件" mkdir -p "$BACKUP_DIR" BACKUP_TIME=$(date +%Y%m%d%H%M%S) print_color "$YELLOW" "备份时间: $BACKUP_TIME" # 备份compose文件 if [ -f "$COMPOSE_FILE" ]; then cp "$COMPOSE_FILE" "$BACKUP_DIR/podman-compose.aliyun-dev.yml.backup.$BACKUP_TIME" print_color "$GREEN" "✓ Compose文件已备份" fi # 备份环境变量文件 ENV_FILE="$WORK_DIR/infrastructure/compose/.env.aliyun" if [ -f "$ENV_FILE" ]; then cp "$ENV_FILE" "$BACKUP_DIR/.env.aliyun.backup.$BACKUP_TIME" print_color "$GREEN" "✓ 环境变量文件已备份" fi # 备份Nginx配置 NGINX_CONF="$WORK_DIR/infrastructure/nginx/conf/aliyun-dev.conf" if [ -f "$NGINX_CONF" ]; then cp "$NGINX_CONF" "$BACKUP_DIR/aliyun-dev.conf.backup.$BACKUP_TIME" print_color "$GREEN" "✓ Nginx配置已备份" fi # 记录当前部署状态 podman ps --format "{{.Names}}: {{.Image}}" > "$BACKUP_DIR/current-deployment-$BACKUP_TIME.txt" print_color "$GREEN" "✓ 当前部署状态已记录" print_color "$GREEN" "\n备份完成,备份目录: $BACKUP_DIR" } # 显示清理摘要 show_summary() { print_section "12. 清理完成摘要" print_color "$YELLOW" "当前运行中容器数量:" podman ps | wc -l | awk '{print $1-1 " 个"}' print_color "$YELLOW" "\n当前镜像数量:" podman images | wc -l | awk '{print $1-1 " 个"}' print_color "$YELLOW" "\n磁盘使用情况:" df -h "$WORK_DIR" print_color "$GREEN" "\n✅ 服务器状态检查与清理完成!" } # 主执行函数 main() { print_color "$CYAN" "========================================" print_color "$CYAN" " 风七六平台 - 服务器状态检查与清理" print_color "$CYAN" "========================================" print_color "$YELLOW" "日期: $(date)" print_color "$YELLOW" "工作目录: $WORK_DIR" # 执行检查 check_server_status check_work_directory check_containers check_images check_network check_logs # 执行清理 cleanup_dangling_images cleanup_old_logs cleanup_stopped_containers cleanup_unused_volumes # 备份配置 backup_configs # 显示摘要 show_summary print_color "$CYAN" "\n========================================" print_color "$CYAN" " 下一步部署建议" print_color "$CYAN" "========================================" print_color "$YELLOW" "1. 从本地推送最新镜像到私有仓库" print_color "$YELLOW" "2. 在服务器上拉取最新镜像" print_color "$YELLOW" "3. 停止旧服务并启动新服务" print_color "$YELLOW" "4. 验证服务状态" print_color "$CYAN" "========================================" } # 解析命令行参数 while [[ $# -gt 0 ]]; do case "$1" in -c|--clean) CLEAN_ONLY=true shift ;; -b|--backup) BACKUP_ONLY=true shift ;; -h|--help) echo "使用方法: $0 [选项]" echo "选项:" echo " -c, --clean 仅执行清理操作" echo " -b, --backup 仅执行备份操作" echo " -h, --help 显示帮助信息" exit 0 ;; *) shift ;; esac done # 执行主函数 main