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

如何解决AWS EC2 Ubuntu实例中sqlite3无法打开数据库文件错误

解决AWS EC2 Ubuntu 20实例部署Telegram Utube机器人的sqlite3数据库报错问题

问题描述

在AWS EC2 Ubuntu 20实例部署Utube Telegram机器人,初始运行正常,随后出现报错:

sqlite3.OperationalError: unable to open database file

完整报错栈:

Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/ubuntu/project/Utube/bot/__main__.py", line 13, in <module>
    UtubeBot().run()
  File "/home/ubuntu/.local/lib/python3.10/site-packages/pyrogram/methods/utilities/run.py", line 61, in run
    self.start()
  File "/home/ubuntu/.local/lib/python3.10/site-packages/pyrogram/sync.py", line 56, in async_to_sync_wrap
    return loop.run_until_complete(coroutine)
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/ubuntu/.local/lib/python3.10/site-packages/pyrogram/methods/utilities/start.py", line 53, in start
    is_authorized = await self.connect()
  File "/home/ubuntu/.local/lib/python3.10/site-packages/pyrogram/methods/auth/connect.py", line 39, in connect
    await self.load_session()
  File "/home/ubuntu/.local/lib/python3.10/site-packages/pyrogram/client.py", line 669, in load_session
    await self.storage.open()
  File "/home/ubuntu/.local/lib/python3.10/site-packages/pyrogram/storage/file_storage.py", line 107, in open
    self.conn = sqlite3.connect(str(path), timeout=1, check_same_thread=False)
sqlite3.OperationalError: unable to open database file

当前配置:

SESSION_NAME = os.environ.get("lethargic", ":memory:")

此前在Replit平台修改session_name为name即可正常运行,但AWS免费层实例出现该错误。

解决方法

1. 排查环境变量取值

执行以下命令查看环境变量lethargic的实际值:

echo $lethargic
  • 如果输出为空,说明环境变量未设置,机器人应使用:memory:内存数据库,不会触发文件报错,这种情况需检查是否有其他代码覆盖了SESSION_NAME配置。
  • 如果输出是一个路径/文件名,确认该路径是否存在、当前用户(ubuntu)是否有读写权限。

2. 修复路径权限与存在性

  • 若环境变量指向的目录不存在,先创建目录:
    mkdir -p /path/to/target/directory
    
  • 给ubuntu用户赋予目标目录的读写权限:
    chown -R ubuntu:ubuntu /home/ubuntu/project/Utube/
    # 或赋予目录通用读写权限
    chmod -R 755 /home/ubuntu/project/Utube/
    

3. 修改SESSION_NAME为明确可写路径

直接指定项目目录下的会话文件路径,避免环境变量带来的不确定性:

SESSION_NAME = os.environ.get("lethargic", "/home/ubuntu/project/Utube/utube_session.session")

这样即使环境变量未设置,机器人也会使用项目目录下的可写文件存储会话。

4. 检查Pyrogram默认会话目录权限

Pyrogram默认将会话文件存在~/.pyrogram/目录下,若环境变量指向该目录下的文件,检查目录权限:

ls -ld ~/.pyrogram/

若权限不足,执行以下命令修复:

chown -R ubuntu:ubuntu ~/.pyrogram/

5. 临时测试内存数据库模式

注释环境变量配置,直接使用内存数据库验证是否为文件路径问题:

SESSION_NAME = ":memory:"

若此模式能正常运行,说明问题确实出在文件路径的权限或存在性上,回到前面步骤排查。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:05:24