写入日志文件时拒绝权限

时间:2013-08-31 11:54:23

标签: django ubuntu uwsgi

我正在使用ubuntu 13.04。我正在使用sudo service 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'

我该如何解决?当我将uwsgi作为sudo运行时,这不应该发生。

2 个答案:

答案 0 :(得分:27)

您需要使用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-表示文件是所有者可读写的,组可读,可写,其他人可读。您必须确保该文件的所有者是尝试向其写入内容的服务,或者该文件属于该服务的组,否则您将收到permission denied错误。

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

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

答案 1 :(得分: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组的组成员也可以写入。