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

Python按文件大小轮转日志时不备份且停止记录问题求助

树莓派4上RotatingFileHandler日志轮转失败的权限问题解决

问题场景

树莓派4设备中,ZoneMinder以www-data用户身份每日调用Python脚本约300次。脚本属主为pi用户,属组为www-data,且pi是www-data组成员。脚本通过RotatingFileHandler实现日志轮转,配置maxBytes=10_000_000(10MB)、backupCount=3,但日志文件google_drive_upload.log达到最大尺寸后,既不生成google_drive_upload.log.1这类备份文件,也无法创建新日志,日志停更两周。

额外现象:

  • 手动删除日志文件后,脚本无法自动重建日志文件
  • 手动创建日志文件并设置权限为pi/www-data时,脚本可正常运行至日志达到最大尺寸,之后再次出现轮转失败问题

报错信息

以www-data用户直接执行脚本时,出现权限拒绝错误:

pi@raspberrypi4zm:~/zm-scripts $ sudo -u www-data ./google_drive_upload.py 8008
Traceback (most recent call last):
  File "/home/pi/zm-scripts/./google_drive_upload.py", line 61, in <module>
    file_handler = logging.handlers.RotatingFileHandler(Path(__file__).parent / "google_drive_upload.log",
  File "/usr/lib/python3.9/logging/handlers.py", line 153, in __init__
    BaseRotatingHandler.__init__(self, filename, mode, encoding=encoding,
  File "/usr/lib/python3.9/logging/handlers.py", line 58, in __init__
    logging.FileHandler.__init__(self, filename, mode=mode,
  File "/usr/lib/python3.9/logging/__init__.py", line 1142, in __init__
    StreamHandler.__init__(self, self._open())
  File "/usr/lib/python3.9/logging/__init__.py", line 1171, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding,
PermissionError: [Errno 13] Permission denied: '/home/pi/zm-scripts/google_drive_upload.log'

初始权限分析

当时脚本所在目录zm-scripts的权限如下:

pi@raspberrypi4zm:~/zm-scripts $ ll
total 44
drwxr-xr-x 3 pi www-data 4096 Jan 27 11:50 ./
drwxr-xr-x 9 pi pi       4096 Jan 12 00:35 ../
-rwxr-xr-- 1 pi www-data  161 Jan 12 00:52 .env*
-rwxr-xr-- 1 pi www-data  106 Jan 12 01:06 .env_example*
drwxr-xr-x 8 pi www-data 4096 Jan 26 15:05 .git/
-rwxr-xr-- 1 pi www-data   66 Jan  5 03:06 .gitattributes*
-rwxr-xr-- 1 pi www-data 2762 Jan  5 03:06 .gitignore*
-rwxr-xr-x 1 pi www-data 8295 Jan 26 13:36 google_drive_upload.py*
-rwxr-xr-x 1 pi www-data   36 Jan  5 03:06 README.md*

问题根源:

  1. 目录zm-scripts权限为drwxr-xr-x,www-data组仅有读权限,无写入权限,导致日志轮转时无法创建备份文件
  2. 日志文件属主为pi,www-data用户对其仅有读权限,无法进行截断、重命名等轮转操作

解决步骤

  1. 修改脚本目录权限,赋予www-data组写入权限:
chmod g+w /home/pi/zm-scripts
  1. 修改日志文件的属主和属组为www-data:
chown www-data:www-data /home/pi/zm-scripts/google_drive_upload.log

验证结果

调整后目录权限如下,日志已正常生成备份文件,轮转功能恢复:

pi@raspberrypi4zm:~/zm-scripts $ ll
total 88
drwxrwxr-x 3 pi       www-data  4096 Jan 27 12:15 ./
drwxr-xr-x 9 pi       pi        4096 Jan 12 00:35 ../
-rwxr-xr-- 1 pi       www-data   161 Jan 12 00:52 .env*
-rwxr-xr-- 1 pi       www-data   106 Jan 12 01:06 .env_example*
drwxr-xr-x 8 pi       www-data  4096 Jan 26 15:05 .git/
-rwxr-xr-- 1 pi       www-data    66 Jan  5 03:06 .gitattributes*
-rwxr-xr-- 1 pi       www-data  2762 Jan  5 03:06 .gitignore*
-rw-r--r-- 1 www-data www-data 12003 Jan 27 12:16 google_drive_upload.log
-rw-r--r-- 1 www-data www-data 24859 Jan 27 12:12 google_drive_upload.log.1
-rwxr-xr-x 1 pi       www-data  8295 Jan 27 12:13 google_drive_upload.py*
-rwxr-xr-x 1 pi       www-data    36 Jan  5 03:06 README.md*

内容的提问来源于stack exchange,提问作者kanka.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:01:18