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

AWS EC2实例中文件存在但Python偶发FileNotFoundError求助

偶发FileNotFoundError排查思路(AWS EC2环境)

针对你遇到的问题,结合AWS EC2的运行环境,以下是几个常见的偶发原因及排查方向:

  • 工作目录不匹配
    你手动执行cat/head时的工作目录,和Python脚本实际运行时的工作目录可能不一致。比如你在/home/ec2-user下操作文件,但脚本如果通过crontab、systemd或其他自动化工具启动,工作目录可能是/或其他路径,导致相对路径./proData.txt找不到目标文件。
    验证方法:在脚本开头添加代码打印当前工作目录:

    import os
    print(f"Current working directory: {os.getcwd()}")
    
  • 文件系统挂载波动或权限变更
    如果文件存放在EFS、临时存储卷(如/dev/xvdh)这类网络或动态挂载的存储上,可能出现偶发的挂载断开/重连,导致短时间内文件不可见;另外,若有其他运维进程(备份、清理脚本)修改了文件/目录的权限,且执行Python脚本的用户和你手动操作的用户不一致,也可能触发问题(注:权限不足通常报PermissionError,但挂载失效会直接报FileNotFoundError)。
    验证方向:用mount命令查看文件所在目录的挂载状态,检查/var/log/messages或dmesg日志是否有挂载相关报错;同时确认脚本运行用户和手动操作用户是否一致(脚本里可加print(f"Running user UID: {os.getuid()}")对比whoami输出)。

  • 文件被临时删除/移动
    可能存在其他定时任务(如日志清理、数据同步脚本)在Python执行open的瞬间,删除或移动了proData.txt,而你手动执行命令时文件刚好处于存在状态。
    验证方法:在脚本的异常捕获中添加目录内容检查,比如:

    import os
    prob_path = './proData.txt'
    try:
        with open(prob_path) as f:
            probs_by_bits = f.readline().strip().split(' ')
            print(probs_by_bits)
    except FileNotFoundError:
        print(f"File not found at {prob_path}, current dir contents: {os.listdir('.')}")
    

    同时查看系统进程日志,排查是否有其他进程操作该文件。

  • 相对路径解析逻辑问题
    如果你的脚本被其他脚本或程序调用,相对路径./proData.txt是相对于调用方的工作目录,而非脚本自身所在的目录。比如脚本放在/opt/scripts/下,调用方在/目录执行它,那么脚本会去/proData.txt找文件,而非/opt/scripts/proData.txt。
    修复方法:改用绝对路径定位文件,确保无论脚本在哪里执行都能找到目标文件:

    import os
    script_dir = os.path.dirname(os.path.abspath(__file__))
    prob_path = os.path.join(script_dir, 'proData.txt')
    
  • 网络存储延迟(EFS/S3挂载场景)
    若文件存放在EFS或通过s3fs挂载的S3存储上,网络波动可能导致短时间内IO超时,触发偶发的FileNotFoundError。EBS本地磁盘出现这类问题的概率极低,但也可以排查IO性能指标。
    验证方法:将文件复制到EC2本地磁盘(如/home/ec2-user/),运行脚本观察是否还会出现错误;同时查看AWS控制台中EFS的监控指标(IOPS、延迟)是否有异常波动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:24:28