You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为默认Ubuntu VPS配置最基础的logrotate规则?

基础logrotate配置指南(适配Ubuntu Nginx + 轻量WordPress站点)

嘿,选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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:55:02