启动时的日志权限

问题描述

我有一个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,mode,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创建的,但是我的脚本是以用户身份运行的。我是否需要在SystemD服务中添加User =选项,以确保每天以正确的用户身份创建日志文件

编辑:为了阐明更多信息,此日志是为Python类和方法配置的。从其他两个不同的python方法调用方法一个以root用户身份运行,另一个用户身份运行。不确定如何以不同的方式实例化它们。

解决方法

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