Django 写入日志文件时权限被拒绝

Django 写入日志文件时权限被拒绝,django,ubuntu,uwsgi,Django,Ubuntu,Uwsgi,我使用的是ubuntu 13.04。我正在使用sudo服务uwsgi start运行uwsgi 我在django中将日志文件配置为/home/shwetanka/logs/mysite/mysite.log 但我得到了这个错误- ValueError: Unable to configure handler 'file': [Errno 13] Permission denied: '/home/shwetanka/logs/mysite/mysite.log' 我怎么修理它?当我以sudo的

我使用的是ubuntu 13.04。我正在使用sudo服务uwsgi start运行uwsgi

我在django中将日志文件配置为
/home/shwetanka/logs/mysite/mysite.log

但我得到了这个错误-

ValueError: Unable to configure handler 'file': [Errno 13] Permission denied: '/home/shwetanka/logs/mysite/mysite.log'

我怎么修理它?当我以sudo的身份运行uwsgi时,这不应该发生。

您需要使用
chmod
命令修复权限,如下所示:
chmod 775/home/shwetanka/logs/mysite/mysite.log

使用
ls-l/home/shwetanka/logs/mysite/mysite.log查看文件的所有者,并使其可写入
uwsgi
。如果文件不属于
uwsgi
,则必须使用
chown
命令

查看使用
ps aux | grep'uwsgi'
运行服务时使用的用户名

如果安全性目前对您来说不是那么重要,请使用
chmod 777/home/shwetanka/logs/mysite/mysite.log
。但事情不是这样的

最安全的方法是检查文件的所有者和组,然后在必要时更改它们,并相应地调整权限

让我们举个例子

如果我在
/home/shwetanka/logs/mysite/mysite.log
中有一个文件,并且命令
ls-l/home/shwetanka/logs/mysite/mysite.log
给出以下输出:

-rw-rw-r-- 1 shwetanka shwetanka 1089 Aug 26 18:15 /home/shwetanka/logs/mysite/mysite.log
这意味着文件的所有者是
shwetanka
,组也是
shwetanka
。现在让我们读一下
rwx
位。第一个组与文件所有者相关,因此
rw-
表示文件所有者可读写,组可读写,其他人可读。您必须确保文件的所有者是尝试向其写入内容的服务,或者该文件属于该服务的组,否则您将收到一个
权限被拒绝的
错误

现在,如果我有一个USWGI服务使用的用户名
uwsgi
,并且希望上述文件可由该服务写入,那么我必须更改文件的所有者,如下所示:


chown-uwsgi/home/shwetanka/logs/mysite/mysite.log
。由于所有者的写入位(第一个
rwx
组)已设置为
1
,因此该文件现在可由UWSGI服务写入。如有任何其他问题,请留下评论。

或者,您可以为uwsgi()设置umask选项

我也有同样的情况,我通过www数据运行uwsgi,并使用buildout。在我的案例中,这个修复看起来像这样:

[uwsgi]
recipe = buildout.recipe.uwsgi
xml-socket = /tmp/uwsgi.sock
xml-master = True
xml-chmod-socket = 666
xml-umask = 0002
xml-workers = 3
xml-env = ...
xml-wsgi-file = ...

在此日志文件权限变为664后,www数据组的组成员也可以写入该日志文件。

谢谢。实际上,uwsgi进程是在“www数据”用户下运行的。我用chown更换了用户,效果很好。无论如何,我将日志文件位置移到了var,并给出了chmod 775和chown www-data:www-data,并且正在工作。再次感谢。