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

Python操作/var/log日志文件出现PermissionError与FileNotFoundError求解

问题根因

你遇到的两个报错属于两个独立的逻辑/权限问题:

  • 不添加os.chmod时报PermissionError:Linux系统的/var/log是系统级日志目录,默认所有者为root,权限为drwxr-xr-x,普通用户仅拥有读和目录进入权限,没有写入权限,无法在目录下新建文件,因此调用open()的追加模式时触发权限拒绝。
  • 添加os.chmod时报FileNotFoundError:你的代码执行顺序错误,调用os.chmod时日志文件还没有被创建,自然找不到目标文件来修改权限。
    另外你开头检查并创建/var/log的代码没有实际作用,几乎所有Linux发行版默认都会存在该目录,且普通用户也没有权限创建/var下的一级目录。

可行解决方案

方案1:使用用户级日志目录(最推荐)

不要强行写入系统级的/var/log目录,改用当前用户拥有完全权限的用户级目录存放日志,无需额外权限配置,安全性最高,代码示例如下:

import os

log_dir = os.path.expanduser("~/.local/share/s3_sync/logs/")
log_filepath = os.path.join(log_dir, "s3_sync.log")
# 递归创建日志目录,已存在时不会报错
os.makedirs(log_dir, exist_ok=True)
# 直接打开写入即可
with open(log_filepath, "a") as f_log_in:
    # 写日志的业务逻辑
    pass

方案2:必须写入/var/log时,提前手动配置日志文件权限

如果业务要求必须存放在/var/log下,推荐提前用root账号创建日志文件并配置对应权限,不需要给程序额外高权限,操作命令如下:

# 创建空日志文件
touch /var/log/s3_sync.log
# 把文件所有者改为运行你Python程序的用户和用户组
chown your_user_name:your_group_name /var/log/s3_sync.log
# 配置合理的日志文件权限(所有者可读写,其他用户仅可读,禁止全局可写)
chmod 644 /var/log/s3_sync.log

配置完成后你的代码不需要保留os.chmod逻辑,直接打开文件写入即可。

方案3:临时测试用sudo提权运行

如果只是本地临时测试,可以用sudo给程序授予root权限运行:

sudo python3 your_script.py

该方案有较高安全风险,禁止在生产环境使用。

方案4:调整代码逻辑(仅程序有root权限时生效)

如果你的程序本身就需要以root权限运行,可以调整代码执行顺序,先创建文件再修改权限,注意不要给日志文件开全局可写权限,避免日志被恶意篡改:

import os
import stat

log_filepath = "/var/log/s3_sync.log"
# 先打开文件,a模式会自动创建不存在的文件
with open(log_filepath, "a") as f_log_in:
    # 文件创建完成后再修改权限
    os.chmod(log_filepath, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
    # 写日志的业务逻辑
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:45:07