You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用UptimeRobot托管Python Discord Bot时JSON文件数据未更新如何解决?

Replit 部署 Discord Bot 被 UptimeRobot 唤醒后 JSON 数据不更新解决方案

核心原因

Replit 被 UptimeRobot 唤醒的运行实例和手动在控制台启动的实例存在两处核心差异:

  1. 进程默认工作目录不同,使用相对路径寻址会指向错误位置
  2. 唤醒后的实例调度优先级较低,未刷入磁盘的缓存数据会在进程临时挂起时丢失

修复步骤

  • 替换相对路径为绝对路径,同时增加强制刷盘逻辑,避免缓存写入丢失
import os
import json

# 获取当前脚本所在目录的绝对路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATA_PATH = os.path.join(BASE_DIR, "data.json")

# 替换原有写入逻辑
with open(DATA_PATH, "w", encoding="utf-8") as file:
    # 直接使用json.dump写入,等价于原有write+json.dumps的写法
    json.dump(data, file, ensure_ascii=False)
    # 强制清空文件缓存
    file.flush()
    # 强制将缓存数据写入磁盘
    os.fsync(file.fileno())
  • 检查保活服务运行架构
    确保 UptimeRobot 监听的 Web 保活服务和 Discord Bot 运行在同一个进程、同一个事件循环内,避免多进程部署导致内存中的用户数据不共享,写入非最新数据。

  • 增加异常捕获逻辑定位问题
    如果上述修改后仍有问题,新增异常捕获代码,在 Replit 控制台查看具体报错信息:

try:
    with open(DATA_PATH, "w", encoding="utf-8") as file:
        json.dump(data, file, ensure_ascii=False)
        file.flush()
        os.fsync(file.fileno())
except Exception as e:
    print(f"数据写入失败: {str(e)}")
  • 确认数据文件存储位置
    不要将 data.json 存放在 /tmp 等系统临时目录下,该目录内容会在实例休眠后被清空,导致写入的数据丢失。

内容的提问来源于stack exchange,提问作者Omkaar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 04:42:00