配置 logrotate 实现PHP-FPM的自动日志分割与清理 (推荐的最佳实践)

在生产服务器上,最佳实践是使用 logrotate 工具来自动管理日志文件。logrotate 可以定期地将旧日志打包、压缩、重命名,并创建新的空日志文件,同时只保留一定数量的旧日志。
Ubuntu Server通常已经安装了logrotate。PHP的安装包通常也会自动创建一个基础的 logrotate 配置文件,我们可以检查并优化它。
步骤 1:检查或创建 logrotate 配置文件
下边以PHP 7.4版本举例,php-fpm 的 logrotate 配置文件通常位于 /etc/logrotate.d/php7.4-fpm。
可以使用 cat 命令查看现有配置:
cat /etc/logrotate.d/php7.4-fpm
如果文件不存在,或者配置不理想,可以创建或修改它。使用编辑器(如 nano 或 vim)打开文件:
sudo nano /etc/logrotate.d/php7.4-fpm
将以下内容粘贴到文件中。这是一个非常实用的配置:
/var/log/php7.4-fpm.log {
# 每天轮替一次
daily
# 如果日志文件不存在,也不报错
missingok
# 保留最近14天的日志文件
rotate 14
# 对轮替后的旧日志进行压缩
compress
# 等到下一次轮替时再压缩,方便查看最近一天的旧日志
delaycompress
# 如果日志文件为空,则不进行轮替
notifempty
# 轮替后创建新文件,并设置权限为 640,所有者为 www-data,组为 adm
# 这确保了 php-fpm 进程有权限写入新日志
create 0640 www-data adm
# 在轮替之后执行的脚本
postrotate
# 通知 php-fpm 主进程重新打开日志文件
/usr/sbin/invoke-rc.d php7.4-fpm reload > /dev/null
endscript
}配置解释:
daily: 每天执行一次日志分割。对于流量不大的网站,也可以改为 weekly。
rotate 14: 保留14个旧的日志文件(即14天的数据)。
compress: 使用gzip压缩旧的日志文件,节省空间。
create …: 在移动了旧日志后,创建一个新的空日志文件,并设置好正确的权限,以便php-fpm可以继续写入。
postrotate … endscript: 这是最关键的部分。它会在日志文件被重命名后,向php-fpm主进程发送一个 reload 信号。这个信号会告诉 php-fpm 重新打开新的 /var/log/php7.4-fpm.log 文件进行写入,从而确保日志记录不会中断。
测试配置
可以模拟运行 logrotate 来检查配置文件是否有语法错误:
sudo logrotate -d /etc/logrotate.d/php7.4-fpm
-d 参数表示调试模式,它只会显示将要执行的操作,但不会真的执行。如果没有任何错误信息,说明配置是正确的。
强制执行一次轮替(可选)
如果想立即让配置生效并执行一次日志分割,可以使用 -f 参数:
sudo logrotate -f /etc/logrotate.d/php7.4-fpm
❤️ 如果这篇文章对您有帮助,欢迎打赏支持

扫描上方二维码,用微信打赏

