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

Apache部署Flask重启后写入日志触发PermissionError [Errno 13]求助

Apache重启后Flask日志权限拒绝问题的解决方案

这种权限问题在Apache部署Flask的场景中十分常见,核心原因是Apache进程的运行用户(默认是www-data)没有日志文件或其所在目录的读写权限,重启后进程重新尝试访问日志文件时触发权限错误。

排查与修复步骤:

  • 检查日志文件的权限与归属
    先查看当前日志文件的权限信息:
    ls -l /path/to/your/logfile.log
    
    确认文件的所属用户/组为www-data,如果不是,执行以下命令修改:
    sudo chown www-data:www-data /path/to/your/logfile.log
    sudo chmod 644 /path/to/your/logfile.log
    
  • 检查日志目录的权限
    日志所在目录需要至少给www-data用户执行权限(允许进入目录)和写权限(允许创建/修改文件):
    ls -ld /path/to/log/directory
    sudo chown www-data:www-data /path/to/log/directory
    sudo chmod 755 /path/to/log/directory
    
  • 避免以root用户初始化日志
    如果你的Flask应用最初是通过root用户启动的,日志文件会被创建为root归属,www-data用户自然无法访问。确保应用启动时以www-data身份运行,或者在代码中创建日志文件时指定正确的权限。
  • 调整logging模块配置
    若代码中动态创建日志文件,可在FileHandler中指定文件权限:
    import logging
    import os
    from logging.handlers import RotatingFileHandler
    
    handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=10)
    handler.setLevel(logging.INFO)
    # 设置文件创建权限为0o644,确保www-data可读写
    def opener(path, flags):
        return os.open(path, flags, 0o644)
    handler._open = lambda: open(handler.baseFilename, handler.mode, encoding=handler.encoding, opener=opener)
    

大量用户都遇到过该问题,本质是Apache运行身份与文件权限不匹配导致,按上述步骤调整后即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:48:22