Разрешение Отказано при записи файла журнала

Я использую ubuntu 13.04. Я запускаю uwsgi, используя 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.

Ответ 1

Вам нужно исправить разрешения с помощью команды 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.

Теперь, если у меня есть имя пользователя uwsgi, которое используется службой USWGI, и хотите, чтобы вышеуказанный файл был доступен для записи этой службой, я должен изменить владельца файла, например:

chown uwsgi /home/shwetanka/logs/mysite/mysite.log. Поскольку бит записи для владельца (первая rwx группа) уже установлен в 1, этот файл теперь будет доступен для записи службой UWSGI. По всем другим вопросам, пожалуйста, оставьте комментарий.

Ответ 2

В качестве альтернативы вы можете установить опцию umask для uwsgi (http://uwsgi-docs.readthedocs.org/en/latest/Options.html#umask).

У меня была такая же ситуация, я запускал uwsgi через www-data, и я использовал 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 также могут записывать в него.