49 lines
1.7 KiB
Bash
Executable File
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
|