简体   繁体   English

django 错误记录:[Errno 13] 权限被拒绝

[英]django error logging : [Errno 13] Permission denied

I'm trying to enable error logging for my site.我正在尝试为我的站点启用错误日志记录。 So I've created a file called log.txt in the root of my project.所以我在项目的根目录中创建了一个名为 log.txt 的文件。

/home/xyz/public_html/projectname/log.txt

and in my setting.py in this address:在我的 setting.py 中这个地址:

/home/xyz/public_html/projectname/projectname/settings.py

I have a simple logging setting:我有一个简单的日志记录设置:

LOGGINGs = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'log.txt',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        'django': {
            'handlers':['file'],
            'propagate': True,
            'level':'DEBUG',
        },

    }
}

This works fine in my localhostbut when I put it online when I'm trying to start the server I get:这在我的本地主机上工作正常但是当我尝试启动服务器时将它放到网上时我得到:

[Tue Nov 22 04:27:37.817043 2016] [wsgi:error] [pid 3619] [remote 111.113.21.35:0] ValueError: Unable to configure handler 'file': [Errno 13] Permission denied: '/log.txt'

here is the error stack:这是错误堆栈:

(XID d4tgu5) Database Connect Error: Access denied for user 'leechprotect'@'localhost' (using password: YES)
[Tue Nov 22 04:36:25.934018 2016] [wsgi:info] [pid 4882] mod_wsgi (pid=4882): Create interpreter 'myproject.com|'.
[Tue Nov 22 04:36:25.960785 2016] [wsgi:info] [pid 4882] mod_wsgi (pid=4882): Adding '/home/xyz/public_html/myproject' to path.
[Tue Nov 22 04:36:25.961397 2016] [wsgi:info] [pid 4882] mod_wsgi (pid=4882): Adding '/usr/local/lib/python3.4/site-packages/' to path.
[Tue Nov 22 04:36:25.963133 2016] [wsgi:info] [pid 4882]  mod_wsgi (pid=4882, process='myproject', application='myproject.com|'): Loading WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py'.
[Tue Nov 22 04:36:26.016998 2016] [wsgi:info] [pid 4925] mod_wsgi (pid=4925): Initializing Python.
[Tue Nov 22 04:36:26.049383 2016] [wsgi:info] [pid 4925] mod_wsgi (pid=4925): Attach interpreter ''.
[Tue Nov 22 04:36:26.386166 2016] [wsgi:error] [pid 4882]  mod_wsgi (pid=4882): Target WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py' cannot be loaded as Pytho
n module.
[Tue Nov 22 04:36:26.386312 2016] [wsgi:error] [pid 4882]  mod_wsgi (pid=4882): Exception occurred processing WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py'.
[Tue Nov 22 04:36:26.386413 2016] [wsgi:error] [pid 4882]  Traceback (most recent call last):
[Tue Nov 22 04:36:26.387088 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 557, in configure
[Tue Nov 22 04:36:26.387135 2016] [wsgi:error] [pid 4882]      handler = self.configure_handler(handlers[name])
[Tue Nov 22 04:36:26.387239 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 725, in configure_handler
[Tue Nov 22 04:36:26.387263 2016] [wsgi:error] [pid 4882]      result = factory(**kwargs)
[Tue Nov 22 04:36:26.388223 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/__init__.py", line 1006, in __init__
[Tue Nov 22 04:36:26.388268 2016] [wsgi:error] [pid 4882]      StreamHandler.__init__(self, self._open())
[Tue Nov 22 04:36:26.388337 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/__init__.py", line 1035, in _open
[Tue Nov 22 04:36:26.388360 2016] [wsgi:error] [pid 4882]      return open(self.baseFilename, self.mode, encoding=self.encoding)
[Tue Nov 22 04:36:26.388418 2016] [wsgi:error] [pid 4882]  PermissionError: [Errno 13] Permission denied: '/log.txt'
[Tue Nov 22 04:36:26.388464 2016] [wsgi:error] [pid 4882] 
[Tue Nov 22 04:36:26.388483 2016] [wsgi:error] [pid 4882]  During handling of the above exception, another exception occurred:
[Tue Nov 22 04:36:26.388491 2016] [wsgi:error] [pid 4882] 
[Tue Nov 22 04:36:26.388509 2016] [wsgi:error] [pid 4882]  Traceback (most recent call last):
[Tue Nov 22 04:36:26.388781 2016] [wsgi:error] [pid 4882]    File "/home/xyz/public_html/myproject/myproject/wsgi.py", line 16, in <module>
[Tue Nov 22 04:36:26.388819 2016] [wsgi:error] [pid 4882]      application = get_wsgi_application()
[Tue Nov 22 04:36:26.389032 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Tue Nov 22 04:36:26.389064 2016] [wsgi:error] [pid 4882]      django.setup()
[Tue Nov 22 04:36:26.389245 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
[Tue Nov 22 04:36:26.389273 2016] [wsgi:error] [pid 4882]      configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
[Tue Nov 22 04:36:26.389521 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/site-packages/django/utils/log.py", line 71, in configure_logging
[Tue Nov 22 04:36:26.389590 2016] [wsgi:error] [pid 4882]      logging_config_func(logging_settings)
[Tue Nov 22 04:36:26.389657 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 789, in dictConfig
[Tue Nov 22 04:36:26.389680 2016] [wsgi:error] [pid 4882]      dictConfigClass(config).configure()
[Tue Nov 22 04:36:26.389726 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 565, in configure
[Tue Nov 22 04:36:26.389745 2016] [wsgi:error] [pid 4882]      '%r: %s' % (name, e))
[Tue Nov 22 04:36:26.389784 2016] [wsgi:error] [pid 4882]  ValueError: Unable to configure handler 'file': [Errno 13] Permission denied: '/log.txt'
[Tue Nov 22 04:36:26.390725 2016] [wsgi:info] [pid 4882]  mod_wsgi (pid=4882, process='myproject', application='myproject.com|'): Loading WSGI script '/home/xyz/public_html/neg
inpay/myproject/wsgi.py'.
[Tue Nov 22 04:36:26.392489 2016] [wsgi:error] [pid 4882]  mod_wsgi (pid=4882): Target WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py' cannot be loaded as Pytho
n module.
[Tue Nov 22 04:36:26.392630 2016] [wsgi:error] [pid 4882]  mod_wsgi (pid=4882): Exception occurred processing WSGI script '/home/xyz/public_html/myproject/myproject/wsgi.py'.
[Tue Nov 22 04:36:26.392724 2016] [wsgi:error] [pid 4882]  Traceback (most recent call last):
[Tue Nov 22 04:36:26.392821 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 557, in configure
[Tue Nov 22 04:36:26.392835 2016] [wsgi:error] [pid 4882]      handler = self.configure_handler(handlers[name])
[Tue Nov 22 04:36:26.392882 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/config.py", line 725, in configure_handler
[Tue Nov 22 04:36:26.392892 2016] [wsgi:error] [pid 4882]      result = factory(**kwargs)
[Tue Nov 22 04:36:26.392931 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/__init__.py", line 1006, in __init__
[Tue Nov 22 04:36:26.392941 2016] [wsgi:error] [pid 4882]      StreamHandler.__init__(self, self._open())
[Tue Nov 22 04:36:26.392976 2016] [wsgi:error] [pid 4882]    File "/usr/local/lib/python3.4/lib/python3.4/logging/__init__.py", line 1035, in _open
[Tue Nov 22 04:36:26.392985 2016] [wsgi:error] [pid 4882]      return open(self.baseFilename, self.mode, encoding=self.encoding)
[Tue Nov 22 04:36:26.393021 2016] [wsgi:error] [pid 4882]  PermissionError: [Errno 13] Permission denied: '/log.txt'

So I thought it's the log file permission so I temporarily set it to 777 until I find a better solution.所以我认为是日志文件权限问题所以我暂时设置为777,直到找到更好的解决方案。 Now I have:我现在有:

ls -l /home/xyz/public_html/myproject/log.txt
-rwxrwxrwx. 1 xyz xyz 0 Nov 22 03:19 /home/xyz/public_html/myproject/log.txt

It didn't work then I've searched around and found some have this problem because of SELinux.它没有用,然后我四处搜索,发现有些人因为 SELinux 而有这个问题。 SO I'VE TURNED THAT OFF AS WELL NOW I HAVE:所以我现在也把它关掉了,我有:

[root@static]# sestatus
SELinux status:                 disabled

But still no luck and I'm getting this error但仍然没有运气,我收到了这个错误

mod_wsgi probably modifies the current directory to / (root of filesystem) mod_wsgi可能会将当前目录修改为/(文件系统的根目录)

Your app tries to write to /log.txt, not into the one you created. 您的应用尝试写入/log.txt,而不是写入您创建的应用。

  • Modify the LOGGINGs so that 'filename' is a full filepath, not a relative one 修改LOGGING,以便'filename'是完整的文件路径,而不是相对文件路径

    'filename': '/home/xyz/public_html/projectname/log.txt', 'filename':'/ home /xyz / public_html / projectname / log.txt',

  • Also check that that the system user than runs apache has write rights on that log.txt 还要检查运行apache的系统用户是否具有该log.txt的写权限

When using mod_wsgi you shouldn't use a separate log file. 使用mod_wsgi时,不应使用单独的日志文件。 Instead direct logging to stdout or stderr and have it be captured in the Apache error log file. 而是直接记录到stdoutstderr并将其捕获到Apache错误日志文件中。 This way Apache worries about permissions and log file rotation etc. See example in section 'Logging of Python exceptions' of: 这种方式Apache担心权限和日志文件轮换等。请参阅“记录Python异常”部分中的示例:

If hosting multiple sites on one Apache, just make sure each VirtualHost its up its own error log file so different sites are separated. 如果在一个Apache上托管多个站点,只需确保每个VirtualHost都有自己的错误日志文件,以便分离不同的站点。

I don't know if this will help anyone, but I had a very similar problem to this question.我不知道这是否对任何人有帮助,但我遇到了与这个问题非常相似的问题。 I am deploying on AWS Elastic Beanstalk and when SSH into an instance as root user and run python3 manage.py shell , no issues.我正在 AWS Elastic Beanstalk 上部署,当 SSH 以root用户身份进入实例并运行python3 manage.py shell时,没有问题。

When I SSH into an instance as ec2_user and run python3 manage.py shell , I see the following error message:当我 SSH 作为ec2_user进入一个实例并运行python3 manage.py shell时,我看到以下错误消息:

(staging) [ec2-user@ip-172-31-9-242 current]$ python3 manage.py shell
Traceback (most recent call last):
  File "/usr/lib64/python3.7/logging/config.py", line 563, in configure
    handler = self.configure_handler(handlers[name])
  File "/usr/lib64/python3.7/logging/config.py", line 736, in configure_handler
    result = factory(**kwargs)
  File "/usr/lib64/python3.7/logging/__init__.py", line 1087, in __init__
    StreamHandler.__init__(self, self._open())
  File "/usr/lib64/python3.7/logging/__init__.py", line 1116, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding)
PermissionError: [Errno 13] Permission denied: '/var/app/current/.logs/django.log'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
    django.setup()
  File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/utils/log.py", line 75, in configure_logging
    logging_config_func(logging_settings)
  File "/usr/lib64/python3.7/logging/config.py", line 800, in dictConfig
    dictConfigClass(config).configure()
  File "/usr/lib64/python3.7/logging/config.py", line 571, in configure
    '%r' % name) from e
  ValueError: Unable to configure handler 'file'

When I check the file permissions...当我检查文件权限时...

(staging) [root@ip-172-31-9-242 current]# ls ./.logs -lash
total 16K
   0 drwxr-xr-x  2 webapp webapp   24 Oct  8 00:29 .
4.0K drwxr-xr-x 18 webapp webapp 4.0K Oct  8 00:31 ..
 12K -rw-r--r--  1 webapp webapp  12K Oct  8 00:40 django.log

It shows my django.log file has permissions of rw-r--r-- (644).它显示我的 django.log 文件具有rw-r--r-- (644) 的权限。 Also notice that the owner of the file is named webapp .另请注意,该文件的所有者名为webapp

Therefore, I added my ec2_user to the webapp group (not explained here), then changed the file permissions of the log file:因此,我将我的ec2_user添加到webapp组(这里不解释),然后更改日志文件的文件权限:

chmod 664 /var/app/current/.logs/django.log

I checked the file permissions again (notice rw-rw-r-- ):我再次检查了文件权限(注意rw-rw-r-- ):

(staging) [ec2-user@ip-172-31-9-242 current]$ ls -lash .logs
total 16K
   0 drwxr-xr-x  2 webapp webapp   24 Oct  8 17:27 .
4.0K drwxr-xr-x 18 webapp webapp 4.0K Oct  8 17:29 ..
 12K -rw-rw-r--  1 webapp webapp  11K Oct  8 17:29 django.log

I can then run python3 manage.py shell然后我可以运行python3 manage.py shell

(staging) [ec2-user@ip-172-31-9-242 current]$ python3 manage.py shell
Python 3.7.10 (default, Jun  3 2021, 00:02:01) 
[GCC 7.3.1 20180712 (Red Hat 7.3.1-13)] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

So the problem was solved by elevating the permissions of the log file.所以通过提升日志文件的权限解决了问题。 The key thing to understand is that my ec2_user is part of the webapp group and then permissions mode 664 permits read and write permissions.要理解的关键是我的ec2_userwebapp组的一部分,然后权限模式 664 允许读取和写入权限。 The "write" permission is the needed permission. “写”权限是必需的权限。

See chmod calculator .请参阅chmod 计算器

chmod计算器

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM