启动时记录权限

Log permissions on boot

我有一个在启动时加载的 SystemD 服务(运行是一个 python 脚本)。有时,我在尝试访问日志文件时遇到权限错误。

Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:     from streamStatus import StreamStatus
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:   File "/var/www/html/EncoderAdmin/streamStatus.py", line 10, in <module>
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:     logHandler = TimedRotatingFileHandler("/var/www/html/EncoderAdmin/stream_status.log", when="midnight", backupCount=10)
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:   File "/usr/lib/python2.7/logging/handlers.py", line 171, in __init__
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:     BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:   File "/usr/lib/python2.7/logging/handlers.py", line 64, in __init__
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:     logging.FileHandler.__init__(self, filename, mode, encoding, delay)
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:   File "/usr/lib/python2.7/logging/__init__.py", line 913, in __init__
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:     StreamHandler.__init__(self, self._open())
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:   File "/usr/lib/python2.7/logging/__init__.py", line 943, in _open
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]:     stream = open(self.baseFilename, self.mode)
Sep 30 14:47:53 Fresno2-encoder manager.py[1266]: IOError: [Errno 13] Permission denied: '/var/www/html/EncoderAdmin/stream_status.log'

发生这种情况时,我注意到日志文件是以 root 身份创建的,但我的脚本是以 运行 用户身份创建的。我是否需要将 User= 选项添加到我的 SystemD 服务以确保每天以正确的用户身份创建日志文件?

编辑:为了进一步说明,此日志是为 Python class 和方法配置的。此方法是从其他两个不同的 python 方法调用的。一个是 运行 作为 root,另一个是作为用户。不确定如何以不同方式实例化它们。

您还可以使用组权限(将用户添加到组并确保创建日志文件时使用该组作为所有者和组 read/write 权限)。