Jua*_*ano 3 python linux logging file-permissions
我正在使用python的日志记录模块.
在每次启动测试时进行单元测试(我们使用py.test)时,一些日志信息会转到某个文件.在集成服务器中,每当有人推送代码时(我们也使用git :),我们运行测试.
问题是,当用户B尝试运行测试时,用户A创建文件后,测试将失败,因为用户B无权在同一文件上写入.
到目前为止,我们已手动更改了文件权限,但看起来像是一个肮脏的解决方案.我们也为每个用户创建一个日志文件,但是再次感觉不对.
我们在测试中记录的代码是
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='/tmp/py.test.log',
filemode='w')
log.setLevel(logging.DEBUG)
log.addHandler(logging.StreamHandler())
Run Code Online (Sandbox Code Playgroud)
有没有办法避免这个问题?也许使用filemode ='a'可以做到这一点,但我们假设我每次都想要一个新文件(说实话,这是一个真正的问题更好奇,我仍然想做正确的事)
谢谢 :)
小智 5
听起来好像日志记录过程试图在另一个用户拥有的现有文件之上编写.以下是允许组访问loggroup
目录的过程logdir
.
使包含目录成为可写组.
$ chgrp loggroup logdir
$ chmod g+w logdir
Run Code Online (Sandbox Code Playgroud)将setgid位置1 logdir
.这使得新文件logdir
始终归该组所有.否则,新文件归创建者组所有.
$ chmod g+s logdir
Run Code Online (Sandbox Code Playgroud)确保所有日志记录用户都属于loggroup
.
$ usermod -a -G loggroup myuser
Run Code Online (Sandbox Code Playgroud)确保所有写入过程都具有正确的umask,以便他们可以使新创建的文件成为可写的.
$ umask 0002
Run Code Online (Sandbox Code Playgroud)现在,该loggroup
组的所有成员都可以在其中创建文件logdir
并覆盖彼此的文件.
归档时间: |
|
查看次数: |
4090 次 |
最近记录: |