2013-08-31 103 views
12

我使用的是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運行時,不應該發生這種情況。

回答

21

您需要使用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

謝謝。實際上uwsgi進程是在'www-data'用戶下運行的。我用chown改變了用戶並且工作。無論如何,我將日誌文件位置移動到var並給予chmod 775和chown www-data:www-data並且正在工作。再次感謝。 – Shwetanka

+0

不客氣。我盡我所能,我很高興它的工作。 ;-) – Luka

0

或者,您可以爲uwsgi設置umask選項(http://uwsgi-docs.readthedocs.org/en/latest/Options.html#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的數據組的組成員也可以寫進去。