我有一个装满日志文件的文件夹,我正在用它logrotate
轮换它们。
直到最近,我只有 Apache 日志文件 - access.log 和 error.log。我添加了来自守护进程的新日志 daemon.log。守护进程日志由以用户身份运行的守护进程写入www-data
。
运行时,logrotate
会创建一个新日志,其权限为640
、用户root
和组adm
。Apache 可以使用这些权限写入访问和错误日志,但我以 身份运行的守护进程www-data
却不能。
在我看来,有以下几种选择:
- 更改
logrotate
配置以手动指定哪些日志文件被赋予哪些权限。但这意味着如果我添加新的日志文件,我需要记住配置logrotate
来管理它。 - 修改
logrotate
脚本以某种方式为 daemon.log 文件创建例外。这可能吗? - 将守护进程日志移至新文件夹,并使用单独的
logrotate
脚本来管理新文件夹中的日志文件。这很简单,但如果可以的话,我希望将所有日志放在一起。 - 设置
logrotate
为在不同的用户和组下创建文件。这似乎有丢失日志信息的风险。 - 将
www-data
用户添加到adm
组,并将权限设置为660
。我不喜欢让www-data
用户无意间访问其他内容。 - 将日志文件的权限设置为
666
。这似乎是个粗暴的解决方案。
这些都不是理想的,而且我敢肯定其中有几个很糟糕。还有其他选择吗,或者其中一个是我最好的选择?我遗漏了什么吗?
答案1
标准答案是让 logrotate 创建具有进程写入所需的所有权的文件。(我不明白为什么这会带来丢失日志信息的风险;也许你可以详细说明为什么你认为这是一种风险。)
您可以通过添加行来实现
create owner group
到 logrotate 配置的相关部分。如果你想让文件具有特定权限,你可以添加
create mode owner group
反而。
例子:
create 644 www-data www-data