如何为默认Ubuntu VPS配置最基础的logrotate规则?
嘿,选logrotate绝对是个靠谱的决定——比起手动写crontab脚本,它是Linux社区维护的标准日志轮转工具,能自动处理压缩、日志切换、旧日志清理这些事儿,完美适配你的轻量站点场景。下面我给你一步步梳理最贴合需求的基础配置:
1. 先搞懂Ubuntu里logrotate的默认逻辑
Ubuntu默认已经预装了logrotate,核心配置分为两部分:
/etc/logrotate.conf:全局默认规则,大部分情况不用改/etc/logrotate.d/:存放各个服务的自定义配置文件,咱们的配置主要放在这里
2. 配置Nginx日志轮转
首先检查下Nginx有没有默认配置:cat /etc/logrotate.d/nginx。如果有,直接修改;没有的话新建一个同名文件。下面是适配你轻量站点的配置,直接用就行:
/var/log/nginx/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` endscript }
给你拆解下关键参数:
daily:每天轮转一次(你的站点流量小,完全够用;如果日志极少也可以改成weekly)missingok:日志文件不存在时不报错,直接跳过rotate 7:保留最近7天的日志,更早的自动删除compress:轮转后的日志用gzip压缩,省磁盘空间delaycompress:延迟压缩一次,避免Nginx还在写旧日志时被压缩导致问题notifempty:空日志文件不轮转,避免生成一堆空压缩包create 0640 www-data adm:轮转后自动创建新日志文件,权限和Nginx默认一致,避免写入权限问题sharedscripts:所有Nginx日志轮转完成后,只执行一次后续脚本postrotate:给Nginx发USR1信号,让它切换到新日志文件(这步必须有,不然Nginx会一直写旧文件)
3. 配置WordPress相关日志轮转
WordPress的日志主要分两类:PHP-FPM运行日志和WP自身的调试日志,咱们分别配置:
3.1 PHP-FPM日志配置
找到你的PHP-FPM日志路径,通常是/var/log/phpX.X-fpm.log(X.X是你的PHP版本,比如7.4、8.2)。在/etc/logrotate.d/下新建php-fpm文件,内容如下:
/var/log/php*-fpm.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 root adm sharedscripts postrotate [ -f /var/run/php*-fpm.pid ] && kill -USR2 `cat /var/run/php*-fpm.pid` endscript }
这里用php*-fpm.log匹配所有版本的PHP-FPM日志,postrotate里的USR2信号会让PHP-FPM切换到新日志文件。
3.2 WordPress调试日志配置(如果开启了的话)
如果你在wp-config.php里开了WP_DEBUG_LOG,日志一般存在站点目录的wp-content/debug.log。假设你的所有WordPress站点都在/var/www/下,新建/etc/logrotate.d/wordpress-debug文件:
/var/www/*/wp-content/debug.log { daily missingok rotate 7 compress delaycompress notifempty create 0644 www-data www-data sharedscripts }
这里不需要切换信号,因为WordPress是PHP脚本,写入日志时会自动检测文件是否存在,轮转后会自动生成新文件。
4. 测试配置是否正常
配置完别急着等自动执行,先手动测试下:
logrotate -d /etc/logrotate.d/nginx # 模拟执行,只输出过程不实际修改文件,用来查错 logrotate -f /etc/logrotate.d/nginx # 强制执行一次轮转,验证实际效果
模拟执行时如果没有报错,说明配置没问题;强制执行后去日志目录看看,应该能看到压缩的旧日志和新生成的空日志文件。
5. 确认自动执行的定时任务
Ubuntu默认logrotate是通过cron.daily每天凌晨自动执行的,你可以检查下定时脚本是否正常:
ls -l /etc/cron.daily/logrotate
只要这个文件存在且有执行权限(权限一般是-rwxr-xr-x),就不用额外配置crontab了,每天会自动跑。
内容的提问来源于stack exchange,提问作者Arcticooling

