22

我正在使用 ubuntu 13.04。我正在使用运行 uwsgisudo service uwsgi start

我在 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 时,这不应该发生。

4

2 回答 2

36

您需要使用命令修复权限,如下所示chmodchmod 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-意味着该文件可由所有者读写,该组可读写,其他组可读。您必须确保文件的所有者是正在尝试向其写入内容的服务,或者该文件属于服务组,否则您将收到permission denied错误消息。

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

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

于 2013-08-31T12:02:41.270 回答
1

或者,您可以为 uwsgi ( http://uwsgi-docs.readthedocs.org/en/latest/Options.html#umask ) 设置 umask 选项。

我有同样的情况,我通过 www-data 运行 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-data组的组成员也可以写入。

于 2014-10-31T10:05:26.650 回答