myTestFreqAI/catch.sh
zhangkun9038@dingtalk.com 7a1993a2e7 去掉一个币对试试
2025-04-26 12:26:11 +08:00

49 lines
1.7 KiB
Bash
Executable File

#!/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