Monolog 错误地以 root 身份轮换文件

Monolog wrongly rotates files as root

提问人:userfuser 提问时间:10/24/2023 更新时间:10/24/2023 访问量:25

问:

我将 Symfony v5.4 与 Monolog 一起使用,它被设置为(用于不太重要的日志)进行自动日志轮换(monolog 的选项)。rotating_file

问题在于,在生产模式下,在实时服务器上,当 Monolog 轮换此类文件(为第二天创建新文件)时,它会将新文件创建为 .root:root

该文件夹中的所有其他日志文件都创建为 。即使某些日志文件尚不存在,并且 Symfony 希望在需要时自动创建它,它也会以用户身份创建。apache:apacheapache

Apache2 以用户身份运行,因此它写入常规日志文件没有问题,但显然,当它尝试写入由 Monolog 自动旋转的新文件时,它会失败。apacheroot:root

我想实际执行轮换的某个进程是以根身份运行的,但是 - 这是哪个进程?这个 Monolog 的日常工作是如何安排的?我没有回避任何关于它的细节。

Symfony本身是通过Apache调用的,Apache运行为.apache

symfony monolog log-rotation

评论

3赞 Fabien Papet 10/24/2023
以 root 用户身份运行的 cron 任务?
0赞 userfuser 10/24/2023
不,root 帐户下没有 crontabs,或者至少没有与 Monolog 相关的 crontabs,我看不到。或者你认为 Monolog 可能已经在内部用 cron 调度了它,并且 cron 进程是以 root 用户身份运行的?可能是这样,但我不确定如何改变它,或者在哪里找到它。
0赞 userfuser 10/24/2023
您是对的@FabienPapet,有一个单独的进程是由 cron 启动的,它被设置为以 root 身份运行(不是直接在 crontab 中,但命令本身仍然有一个 )。因此,有时该过程会在当天早些时候首先运行,并自动将新的每日文件创建为 .其他时候,Symfony会导致文件创建(在其他进程之前),因此它将以用户身份创建 - 然后不会失败。这就解释了为什么这个问题是不规则的。如果您添加您的评论作为答案,我很乐意接受。sudorootapache
0赞 userfuser 10/24/2023
我还应该在这里提到,最初的“问题”实际上是不正确的,从某种意义上说,显然,Monolog 不会旋转日志,因此它没有使用任何“工具”进行旋转。Monolog 总是尝试写入像 - 这样的文件,如果该文件丢失,它将以运行当前进程的任何用户的名义动态创建。some-YYYY-MM-DD.log

答:

1赞 Fabien Papet 10/24/2023 #1

这可以来自以 root 身份的 cronjob 或使用 运行的命令。如果文件不存在,这可以创建文件。他们有root所有者,所以apache无法访问它们。sudo