Files
cbpred/docs/deployment.md
2026-08-24 20:17:24 +08:00

3.7 KiB
Raw Blame History

8H 预测服务部署

方案对比

方案 适用场景 本项目的限制
cron 单机、只需固定时间执行一条命令 需要额外处理 K 线入库延迟、重启后重复运行、互斥锁、通知失败重试和结构化日志。
Python 常驻服务 需要状态、通知和后续扩展 需要由 systemd 或其他进程管理器守护。

当前实现选择 Python 常驻服务。它每 poll_seconds 秒检查一次,但只会在 UTC 的 00:00、08:00、16:00 后经过 grace_seconds,针对刚结束的 8H K 线执行一次。成功状态只会在预测和全部通知都成功后写入;通知或预测失败时,下一次轮询会重试同一根 K 线,进程异常退出时由 systemd 重启。

配置

复制 config/prediction-service.yml.example 到 /etc/cbpred/prediction-service.yml,填写实际路径、Webhook 和 SMTP 参数。字符串中的 ${NAME} 会在进程启动时从环境变量读取;缺失的变量会使服务启动失败,避免把空密钥发送到外部服务。

例如,/etc/cbpred/prediction-service.env:

CBPRED_WEBHOOK_TOKEN=replace-with-webhook-token
CBPRED_SMTP_PASSWORD=replace-with-smtp-password

将其设为仅服务账户可读,例如 chmod 600 /etc/cbpred/prediction-service.env。不要把密钥提交到仓库。

HTTP 通知默认发送 event、K 线结束时间、report.json 摘要和全部 CSV 行;可在各个目标上设置 include_predictions: false 或 max_rows。邮件会包含摘要并默认附加 predictions.csv。HTTP 或邮件任一失败,状态文件不会推进,因此会重试。

验证和安装

先执行一次只读调度检查。若当前不在 K 线完成后的宽限期内,它会正常退出且不执行预测:

/data/quant/cbpred/.venv/bin/python -m cbpred.prediction_service \
  --config /etc/cbpred/prediction-service.yml --once

将 scripts/cbpred-prediction.service 安装为 systemd unit:

sudo install -d -m 755 /etc/cbpred
sudo install -d -o ctyun -g ctyun -m 750 /var/lib/cbpred
sudo install -o root -g ctyun -m 640 config/prediction-service.yml.example /etc/cbpred/prediction-service.yml
sudo install -o root -g ctyun -m 640 config/prediction-service.env.example /etc/cbpred/prediction-service.env
sudo install -m 644 scripts/cbpred-prediction.service /etc/systemd/system/cbpred-prediction.service
sudo systemctl daemon-reload
sudo systemctl enable --now cbpred-prediction.service
sudo systemctl status cbpred-prediction.service

查看运行日志:

journalctl -u cbpred-prediction.service -f

服务使用状态文件锁避免并发重复运行。不要为同一套输出目录同时启用 update_and_predict.sh 的 cron 作业和该服务。

没有系统管理员权限时,可使用已启用 linger 的用户级 systemd。它使用同一套服务逻辑,但配置与状态文件放在当前用户目录:

install -d -m 700 ~/.config/cbpred ~/.local/state/cbpred ~/.config/systemd/user
install -m 600 config/prediction-service.user.yml.example ~/.config/cbpred/prediction-service.yml
install -m 600 config/prediction-service.env.example ~/.config/cbpred/prediction-service.env
install -m 644 scripts/cbpred-prediction.user.service ~/.config/systemd/user/cbpred-prediction.service
systemctl --user daemon-reload
systemctl --user enable --now cbpred-prediction.service

查看用户服务日志:

journalctl --user -u cbpred-prediction.service -f

如果只需 cron,可将 scripts/update_and_predict.sh 安排在 2 0,8,16 * * *(UTC)之后运行,并自行提供锁、通知与失败监控;这正是本服务已经处理的部分。