Отказано в доступе при записи файла журнала
Я использую 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.
2 ответа
Вам нужно исправить разрешения с помощью 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. По любым вопросам, пожалуйста, оставьте комментарий.
В качестве альтернативы вы можете установить параметр umask для uwsgi ( http://uwsgi-docs.readthedocs.org/en/latest/Options.html).
У меня была такая же ситуация, я запускал 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 group также могут писать в него.