24

ローテーションファイルにログを記録するdjango 1.4.2アプリケーションがあります。私のsettings.pyには次のものがあります:

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
    'standard': {
        'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
    },
},
'handlers': {
    'default': {
        'level':'DEBUG',
        'class':'logging.handlers.RotatingFileHandler',
        'filename': '/var/www/html/logs/mylog.log',
        'maxBytes': 1024*1024*5, # 5 MB
        'backupCount': 5,
        'formatter':'standard',
    },
    'request_handler': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': '/var/www/html/logs/django_request.log',
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'standard',
    },
},
'loggers': {
    '': {
        'handlers': ['default'],
        'level': 'ERROR',
        'propagate': True
    },
    'django.request': { # Stop SQL debug from logging to main logger
        'handlers': ['request_handler'],
        'level': 'DEBUG',
        'propagate': False
    },
}

}

したがって、ログ ディレクトリに次のファイルが表示されます。

mc.log
mc.log.1
mc.log.2
mc.log.3
mc.log.4
mc.log.5

mc.log が 5M に達すると、ファイルは正しくローテーションされますが、新しい mc.log が所有権 root.root で作成されます。apache は apache ユーザーで実行されているため、ファイルにアクセスできなくなり、アプリケーションが動作しなくなります。新しいログが apache.apache ではなく root.root の所有権で作成される理由は何ですか?

ありがとう

4

1 に答える 1

10

親ディレクトリのユーザー/グループが許可する場合、新しいファイルを作成できます。ディレクトリの所有者を変更するか、apache ユーザーを含むディレクトリにグループを追加するか、ACL などの高度な手法を使用する必要があると思います。

テストするには、次のことを試してください。 root としてログインします。apache ユーザーに切り替えます。手動でファイルを作成してみてください。root に戻り、フォルダーのアクセス許可/所有権を変更し、apache ユーザーに切り替えて、もう一度やり直してください。これにより、ファイルの作成中にスクリプトが失敗するかどうかについての詳細情報が得られます。

最後に、これは少し直感に反します。apache ユーザーがそのディレクトリで何らかの実行権限を持っていることを確認してください。そうしないと、そこに cd することができません。

また、新しく追加されたファイルがディレクトリの権限を継承するように、ディレクトリの「s」ビット(chmod g+sまたはその他)を設定する必要があると思います。chmod 2755次に、グループの s ビットが設定されていること、およびグループがディレクトリを所有していることを確認する必要があります。(または、ディレクトリのグループを www-data に設定できます)。

于 2013-01-16T08:45:46.417 に答える