[英]Permission denied when python app tries to write log file into shared volume in docker
[英]Django app cannot write to log handler; permission denied
我在Django 1.6.11,Apache 2.4,mod_wsgi上遇到問題,其中日志處理程序沒有寫日志文件的權限。 我意識到這里有很多類似的問題,並且大多數問題都可以通過正確設置文件權限來解決。 我相信在這種情況下權限設置正確,但很高興被證明是錯誤的...
從Apache日志+ ps
,您可以看到Apache用戶是apache
:
[Fri Oct 16 12:47:25.360845 2015] [:error] [pid 33075] [client XXX.XXX.XXX.XXX:64316] ValueError: Unable to configure handler 'custom': [Errno 13] Permission denied: '/var/www/producer/logs/producer2.log', referer: https://example.com/
[user@xxx.xxx.xxx.xxx producer] $ ps auxw | grep 33075
apache 33075 0.8 0.3 445296 27668 ? Sl 12:47 0:00 /usr/sbin/httpd -DFOREGROUND
user 33230 0.0 0.0 112640 964 pts/2 R+ 12:47 0:00 grep --color=auto 33075
但是我的文件許可權表明apache
擁有目標文件並且具有讀/寫許可權:
[user@xxx.xxx.xxx.xxx producer] $ ls -al logs
total 4
drwxrwxr-x. 2 apache apache 69 Oct 16 12:45 .
drwxr-xr-x. 20 root root 4096 Oct 13 16:50 ..
-rw-r--r--. 1 apache apache 0 Oct 16 12:45 producer2.log
-rw-rw-r--. 1 apache apache 0 Oct 16 12:41 producer.log
-rw-rw-r--. 1 apache apache 0 Oct 13 16:50 test_producer.log
[user@xxx.xxx.xxx.xxx producer] $ pwd
/var/www/producer
將日志文件的權限更改為777
並沒有幫助。
我的處理程序是這樣配置的:
'handlers': {
'custom': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/var/www/producer/logs/producer2.log',
'mode': 'a',
'maxBytes': 10000000,
'backupCount': 5,
'formatter': 'verbose'
},
我可以在處理程序中將文件更改為指向其他位置,但是無論我將其指向何處以及如何更改目標文件/目錄的Permission denied
,都會出現“ Permission denied
錯誤。 我記得有時您也必須更改父目錄的權限,但是即使將其設置為777
並由apache
擁有,我也會遇到相同的錯誤。
我是否在某個地方錯過了一個愚蠢的步驟,或者有錯別字(可以從一些新鮮的眼睛中受益)? 是否有其他可能的原因導致此問題,這些原因已被掩蓋? 我之前在其他應用中已經做到了這一點,通常可以使用文件系統權限來清除它...
好的,這是一個隨機的解決方案,但是事實證明,我們的IT部門正在使用SELinux來管理內核級權限...這忽略了我所做的任何事情。 解決方案-與IT一起更新SELinux權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.