如何让 logrotate 服从 logrotate.d/uwsgi 而不是 uwsgi.ini? (森托斯 6)

How do I get logrotate to obey logrotate.d/uwsgi instead of uwsgi.ini? (Centos 6)

所以设置最大日志轮转大小似乎只有在 uwsgi.ini 中设置时才有效,而不是 /etc/logrotate。d/uwsgi(即使使用 /etc/logrotate 手动测试 logrotate .d/uwsgi 文件有效,我在 cron 或 logrotate 状态日志中没有看到任何错误)。

/var/log/uwsgi/*.log {
daily
missingok
dateext
rotate 7
size 100M
copytruncate
create
compress
}

是否有设置使 logrotate 使用上述而不是 uwsgi.ini?

我看到您 copytruncate 是正确的。如果你不这样做,那么你必须使用 postrotate 来停止并重新启动 UWSGI。

正如您提到的手动触发 /etc/logrotate。d/uwsgi 有效,这似乎是您的 cron 作业的问题。

你可以把它放在 /etc/cron.d/ 然后检查 /tmp/logrotate.status 运行后的输出(修改调度表达式以满足你的调试需要)。

0 2 * * * root logrotate /etc/logrotate.d/uwsgi --state /tmp/logrotate.status

如果您需要有关计划表达式的帮助,请选中此 crontab.guru link。

问题的原因源于 SELinux 安全上下文,其中包含在原始 logrotate 配置中的日志目录没有正确的安全权限。所以当我一直做 ls -al 时,我找不到任何错误,因为它没有显示每个 directory/file 的 SELInux 安全设置。我不得不做 ls -Z 或类似的事情。