定时推送快速开始指南

November 20, 2025 · View on GitHub

快速配置(3步开始使用)

1. 配置推送时间窗口

编辑 config.yaml

notification:
  enable_notification: true
  
  push_window:
    enabled: true              # 启用定时推送
    time_range:
      start: "09:00"           # 每天9点开始
      end: "18:00"             # 18点结束
    once_per_day: true         # 每天只推送一次
    push_record_retention_days: 30  # 保留30天记录

2. 启动服务

# 编译
go build -o trendhub ./cmd/main.go

# 启动 Web 模式(会自动启用定时推送)
./trendhub -web

3. 查看推送记录

打开浏览器访问:http://localhost:8080

点击"推送记录"标签页即可查看所有历史推送记录。

常见使用场景

场景1: 工作日定时推送

push_window:
  enabled: true
  time_range:
    start: "09:00"
    end: "18:00"
  once_per_day: true

效果: 每个工作日在 9:00-18:00 之间第一次检查时推送一次

场景2: 晚间汇总推送

push_window:
  enabled: true
  time_range:
    start: "20:00"
    end: "22:00"
  once_per_day: true

效果: 每天晚上 20:00-22:00 之间推送当日汇总

场景3: 多次推送(不推荐)

push_window:
  enabled: true
  time_range:
    start: "08:00"
    end: "20:00"
  once_per_day: false  # 关闭每日一次限制

效果: 在 8:00-20:00 期间,每分钟都会检查并可能推送(慎用)

场景4: 跨夜推送

push_window:
  enabled: true
  time_range:
    start: "22:00"
    end: "02:00"     # 次日凌晨2点
  once_per_day: true

效果: 每天晚上 22:00 到次日凌晨 02:00 之间推送

Web 界面功能

推送记录页面

  • ✅ 查看所有历史推送记录
  • ✅ 显示推送时间、状态、条目数
  • ✅ 查看执行耗时和错误信息
  • ✅ 分页浏览历史记录
  • ✅ 刷新按钮实时更新

记录信息

每条记录包含:

  • 时间: 精确到秒的推送时间
  • 状态: 成功(绿色)/ 失败(红色)/ 部分成功(黄色)
  • 推送条目: 本次推送的新闻条目数量
  • 耗时: 任务执行时间
  • 错误信息: 如果失败,显示错误原因

常见问题

Q: 为什么没有自动推送?

A: 检查以下几点:

  1. push_window.enabled 是否为 true
  2. 当前时间是否在配置的时间窗口内
  3. 如果启用了 once_per_day,今天是否已经推送过
  4. 查看日志确认调度器是否正常启动

Q: 如何手动触发推送?

A: 在 Web 界面的"仪表盘"页面点击"立即运行"按钮

Q: 推送记录保存在哪里?

A: 默认保存在 data/push_records.db 文件中

Q: 可以导出推送记录吗?

A: 目前支持通过 API 接口获取:

curl http://localhost:8080/api/push-records?limit=100

Q: 如何清理旧记录?

A: 设置 push_record_retention_days,系统会自动清理:

push_window:
  push_record_retention_days: 7  # 只保留7天

测试建议

1. 测试时间窗口

设置一个即将到来的时间窗口:

time_range:
  start: "14:30"  # 设置为当前时间后几分钟
  end: "14:35"

2. 观察日志

# 查看完整日志
./trendhub -web 2>&1 | tee trendhub.log

# 日志会显示:
# - Scheduler started with time window: 14:30 - 14:35
# - Time window matched, executing task...
# - Task completed successfully, pushed 10 items

3. 验证记录

推送完成后:

  1. 打开 Web 界面
  2. 切换到"推送记录"标签
  3. 查看最新的推送记录

命令行参数

./trendhub -web                           # 使用默认配置
./trendhub -web -addr :9090              # 指定端口
./trendhub -web -db data/my_records.db   # 指定数据库路径
./trendhub -web -config my_config.yaml   # 指定配置文件

生产环境部署

使用 systemd

创建 /etc/systemd/system/trendhub.service

[Unit]
Description=TrendHub Push Service
After=network.target

[Service]
Type=simple
User=trendhub
WorkingDirectory=/opt/trendhub
ExecStart=/opt/trendhub/trendhub -web -addr :8080
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl daemon-reload
sudo systemctl enable trendhub
sudo systemctl start trendhub
sudo systemctl status trendhub

使用 Docker

FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o trendhub ./cmd/main.go

FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata
WORKDIR /root/
COPY --from=builder /app/trendhub .
COPY config.yaml frequency_words.txt ./
RUN mkdir -p data
EXPOSE 8080
CMD ["./trendhub", "-web", "-addr", ":8080"]

构建和运行:

docker build -t trendhub .
docker run -d -p 8080:8080 -v $(pwd)/data:/root/data --name trendhub trendhub

监控和维护

检查服务状态

curl http://localhost:8080/api/status

查看最近的推送

curl http://localhost:8080/api/push-records?limit=5

备份数据库

# 定期备份推送记录
cp data/push_records.db data/backup/push_records_$(date +%Y%m%d).db

技术支持

如有问题,请查看:

  • 完整文档:docs/PUSH_SCHEDULE.md
  • 配置示例:config.example.yaml
  • 项目 Issues:提交问题反馈

祝使用愉快!🎉