2016-11-21 4 views
4

У меня есть очень хороший вопрос, который я бы хотел, чтобы эксперт прокомментировал это для меня, пожалуйста. (возможно, Грэм Дамплтон)Какое разрешение/пользователь использует apache2 для записи журналов django

Итак, у меня есть веб-приложение Django (разработанное на ubuntu 16.04), которое регистрирует некоторые сбои, как показано ниже на /var/log/apache2/APPNAME.log.

Поскольку все файлы в/var/log/apache2 имеют root: adm owner, я предоставил право владения моим файлом журнала таким же образом, и я убедился, что www-data является членом группы adm. Затем я предоставил rwx группе adm для группы владельцев, и я тестировал, что все работает нормально.

После 24 часов разрешение файла и родительской папки изменилось, и я вижу, что разрешение на запись было отозвано из файла журнала, а родительский каталог, вызвавший разрешение, отклонил ошибку в ошибке, поскольку файл журнала не мог быть записан ,

Вот мои вопросы, если вы могли бы любезно помочь:

1), где это правильное место, чтобы поместить Джанго лог-файлы?

2) Какой процесс под каким правом пользователя записывает файл?

3) Какой процесс сбрасывает разрешения в/var/log/apache и почему?

Спасибо много заранее,

Я надеюсь, что этот вопрос тоже помочь другим.

Приветствия, Майк

views.py
from django.shortcuts import render 
from django.shortcuts import render 
from django.http import HttpResponse, HttpResponseRedirect 
from django import forms 
from django.core.mail import send_mail, EmailMessage 
from StudioHanel.forms import ContactForm 

import traceback 
import time 

# import the logging library 
import logging 
import sys 

# Get an instance of a logger 
#logger = logging.getLogger('APPNAME') 

def contact(request): 
    logger.debug('Contact Start!') 

    if request.method == 'POST': 
     etc... 

settings.py
LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 

    'handlers': { 
     'mail_admins': { 
      'level': 'ERROR', 
      'filters': ['require_debug_false'], 
      'class': 'django.utils.log.AdminEmailHandler' 
     }, 

     'applogfile': { 
      'level':'DEBUG', 
      'class':'logging.handlers.RotatingFileHandler', 
      'filename': os.path.join('/var/log/apache2', 'APPNAME.log'), 
      'maxBytes': 1024*1024*15, 15MB 
      'backupCount': 10, 
     }, 


    }, 

    'loggers': { 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': True, 
     }, 
     'APPNAME': { 
      'handlers': ['applogfile',], 
      'level': 'DEBUG', 
     }, 
    } 
} 
+0

Что вы ищете? –

+0

Ubuntu 16.04 - это операционная система. Веб-сервер - apache 2.4.18. Djagno 1.7. И, пожалуйста, оцените вопрос, считаете ли вы, что это может помочь другим. веселит. –

ответ

4

1), где это правильное место, чтобы поместить Джанго лог-файлы?

Недавно я инициировал discussion в списке рассылки django-пользователей о каталогах, которые будут использоваться для проектов Django, и я пришел к выводу, что стандартной практики нет. Я решил использовать /var/log/django-project-name.

В любом случае, /var/log/apache2 не в тех местах, где вы обнаружили, что проблема logrotate. Подробнее об этом ниже.

2) Какой процесс под каким разрешением пользователя записывает файл?

Если вы используете Gunicorn, это процесс gunicorn, и если вы используете uWSGI, это uwsgi. Судя по вашей ссылке на Грэма Дамплтона, вы используете mod_wsgi. Таким образом, этот процесс является демоном mod_wsgi.

Пользователь, который эти процессы записывают в файл, является пользователем, выполняющим этот процесс. Для mod_wsgi вы можете указать опцию user директиве WSGIDaemonProcess. Согласно its documentation: «Если эта опция не указана, процессы демона будут выполняться как один и тот же пользователь, которым Apache будет запускать дочерние процессы и как определено в директиве User». В Ubuntu это www-data.Я думаю, что неплохо использовать опцию user и запустить демона в качестве другого выделенного пользователя.

Не следует добавлять www-data в группу adm. Группа adm - это люди, у которых есть разрешение на чтение файлов журнала. www-data не должен иметь такого разрешения. (Чтение и запись собственных файлов журналов в порядке, но вы не хотели бы иметь разрешение на чтение /var/log/syslog.)

3) Какой процесс сбрасывает разрешения в/var/log/apache и почему?

Это logrotate, которым управляет cron; см. /etc/cron.daily/logrotate. Конфигурация в /etc/logrotate.d/apache2 управляет всеми файлами, соответствующими /var/log/apache2/*.log. Основная цель logrotate состоит в том, чтобы, ну, вращать журналы. То есть каждый день создается новый файл журнала, вчера - access.log.1, до вчерашнего дня access.log.2.gz и т. Д., А журналы старше нескольких дней удаляются. Это делается для экономии места и ведения журналов. logrotate также будет исправлять разрешения файлов, если они ошибочны.

В теории вы должны настроить logrotate, чтобы также повернуть ваши журналы проекта Django, иначе они могут в конечном итоге заполнить диск.

+0

Удивительный и огромный спасибо. –

0

Для mod_wsgi вам лучше направить протокол Python на stderr или stdout, чтобы он был зафиксирован в журнале ошибок Apache. Не создавайте отдельный файл журнала, как с помощью файла журнала Apache, такие вещи, как вращение файла журнала, будут обрабатываться автоматически. В качестве примера можно в разделе «Logging исключений Python» в:

ли обеспечить хотя настраивать отдельный журнал ошибок для Apache для VirtualHost так, что ваша регистрация на сайте сохраняется далеко отдельно к основному журналу ошибок Apache.

 Смежные вопросы

  • Нет связанных вопросов^_^