#!/bin/bash # 快速执行日志压缩的便捷脚本 # 获取脚本所在目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" # 必填参数 - 没有默认值 YEAR="" MONTH="" START_DAY="" END_DAY="" INVENTORY="$PROJECT_ROOT/inventory/hosts.yaml" PLAYBOOK="$PROJECT_ROOT/playbooks/compress_logs.yaml" # 显示帮助信息 show_help() { cat << EOF 用法: $0 -y YEAR -m MONTH -s START_DAY -e END_DAY [其他选项] 必填选项: -y, --year YEAR 年份 -m, --month MONTH 月份 -s, --start-day DAY 起始日期 -e, --end-day DAY 结束日期 可选选项: -h, --host HOST 指定单个主机 --no-rm-origin 不删除原文件夹 --no-download 不下载到本地 --no-rm-archive 不删除远程压缩包 --help 显示此帮助信息 示例: # 压缩2025年11月21-30日的日志 $0 -y 2025 -m 11 -s 21 -e 30 # 压缩2025年12月的所有日志 $0 -y 2025 -m 12 -s 01 -e 31 # 只处理jhlog服务器 $0 -y 2025 -m 11 -s 21 -e 30 -h jhlog # 只压缩不删除原文件 $0 -y 2025 -m 11 -s 21 -e 30 --no-rm-origin EOF } # 解析命令行参数 EXTRA_VARS="" LIMIT="" while [[ $# -gt 0 ]]; do case $1 in -y|--year) YEAR="$2" shift 2 ;; -m|--month) MONTH="$2" shift 2 ;; -s|--start-day) START_DAY="$2" shift 2 ;; -e|--end-day) END_DAY="$2" shift 2 ;; -h|--host) LIMIT="--limit $2" shift 2 ;; --no-rm-origin) EXTRA_VARS="$EXTRA_VARS remove_after_compress=false" shift ;; --no-download) EXTRA_VARS="$EXTRA_VARS download_to_local=false" shift ;; --no-rm-archive) EXTRA_VARS="$EXTRA_VARS remove_local_archives=false" shift ;; --help) show_help exit 0 ;; *) echo "未知选项: $1" show_help exit 1 ;; esac done # 验证必填参数 if [ -z "$YEAR" ] || [ -z "$MONTH" ] || [ -z "$START_DAY" ] || [ -z "$END_DAY" ]; then echo "错误: 缺少必填参数!" echo "" show_help exit 1 fi # 构建完整的 extra-vars EXTRA_VARS="year=$YEAR month=$MONTH start_day=$START_DAY end_day=$END_DAY $EXTRA_VARS" # 显示执行信息 echo "==========================================" echo "日志压缩任务" echo "==========================================" echo "年份: $YEAR" echo "月份: $MONTH" echo "日期范围: $START_DAY - $END_DAY" echo "下载路径: /mnt/d/logs//$YEAR/$MONTH/" echo "==========================================" echo "" # 执行 ansible-playbook ansible-playbook -i "$INVENTORY" "$PLAYBOOK" $LIMIT -e "$EXTRA_VARS"