我正在使用ubuntu 13.04。我正在使用sudo 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'
我该如何解决?当我将uwsgi作为sudo运行时,这不应该发生。
答案 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组的组成员也可以写入。