Files
log-fetch/scripts/compress_logs.sh

123 lines
3.0 KiB
Bash

#!/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 1 -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/<host_name>/$YEAR/$MONTH/"
echo "=========================================="
echo ""
# 执行 ansible-playbook
ansible-playbook -i "$INVENTORY" "$PLAYBOOK" $LIMIT -e "$EXTRA_VARS"