#!/bin/bash # 脚本名称: filter_freqtrade_logs.sh # 功能: 实时过滤 Freqtrade 容器日志,捕获包含 "but got Index" 的日志及上下文,输出到文件和终端 # 配置 CONTAINER_NAME="freqtrade_freqtrade_run_ef258891294d" # 容器名称或 ID OUTPUT_FILE="freqtrade_error_logs.txt" # 输出日志文件 SEARCH_PATTERN="but got Index" # 过滤的关键字 CONTEXT_LINES=5 # 匹配行后的上下文行数 # 检查容器是否存在 if ! docker ps -a --format '{{.Names}}' | grep -q "$CONTAINER_NAME"; then echo "错误: 容器 $CONTAINER_NAME 不存在。请检查容器名称或 ID。" exit 1 fi # 检查容器是否正在运行 if ! docker ps --format '{{.Names}}' | grep -q "$CONTAINER_NAME"; then echo "警告: 容器 $CONTAINER_NAME 未运行,将获取历史日志。" RUNNING=false else RUNNING=true fi # 初始化输出文件 echo "开始过滤日志,输出到 $OUTPUT_FILE ..." >"$OUTPUT_FILE" # 清空或创建输出文件 # 实时过滤日志 if [ "$RUNNING" = true ]; then echo "实时监控 $CONTAINER_NAME 的日志,过滤 '$SEARCH_PATTERN'..." docker logs -f "$CONTAINER_NAME" 2>/dev/null | stdbuf -oL grep --line-buffered -i -A "$CONTEXT_LINES" "$SEARCH_PATTERN" | tee -a "$OUTPUT_FILE" else echo "获取 $CONTAINER_NAME 的历史日志,过滤 '$SEARCH_PATTERN'..." docker logs "$CONTAINER_NAME" 2>/dev/null | grep -i -A "$CONTEXT_LINES" "$SEARCH_PATTERN" | tee -a "$OUTPUT_FILE" fi # 检查是否捕获到日志 if [ -s "$OUTPUT_FILE" ]; then echo "已捕获日志,保存在 $OUTPUT_FILE" else echo "未捕获到包含 '$SEARCH_PATTERN' 的日志,文件 $OUTPUT_FILE 为空" fi