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

Ubuntu服务器MongoDB日志后缀大数字含义及logrotate疑问

MongoDB logrotate 日志文件名大数字解释与修复

大数字的含义

你看到的日志文件名后的大数字(如52548376)是Unix时间戳,代表日志轮转操作发生的精确时间(从1970年1月1日00:00:00 UTC到轮转时刻的秒数)。

出现这种命名方式的核心原因是你的logrotate配置同时设置了两个轮转触发条件:

  • daily:每天自动轮转日志
  • size 100M:日志文件达到100MB时轮转

当logrotate同时存在多个触发条件时,默认会放弃常规的递增数字后缀(如.1、.2),改用时间戳命名轮转后的日志,避免不同触发条件下的命名冲突。

解决方案

根据你的实际需求选择对应的调整方式:

1. 仅按文件大小轮转(符合你最初的预期)

如果只需要日志达到100MB时轮转,删除配置中的daily项即可。修改后的配置如下:

/var/log/mongodb/*.log{
   rotate 7
   size 100M
   missingok
   create 0600 mongodb mongodb
   delaycompress
   compress
   sharedscripts
   postrotate
     /bin/kill -SIGUSR1 $(pgrep -f mongod)
   endscript
}

修改后,轮转后的日志会以.1、.2....7的递增数字命名,最多保留7份,完全匹配你对轮转数字的预期。

2. 保留双条件轮转,改用可读性更强的日期后缀

如果需要同时满足“每天轮转”和“达到100MB就轮转”,可以添加dateext参数,让日志用日期后缀(如mongod.log-20240520)替代时间戳:

/var/log/mongodb/*.log{
   rotate 7
   daily
   size 100M
   dateext
   missingok
   create 0600 mongodb mongodb
   delaycompress
   compress
   sharedscripts
   postrotate
     /bin/kill -SIGUSR1 $(pgrep -f mongod)
   endscript
}

注:若同一天内因文件大小触发多次轮转,日志会自动在日期后添加递增数字(如mongod.log-20240520.1)。

额外验证

你配置中postrotate部分的kill -SIGUSR1是正确的:MongoDB收到SIGUSR1信号后会自动关闭当前日志文件并重新打开新文件,确保logrotate轮转后的日志能被正常写入。

内容的提问来源于stack exchange,提问作者Josea Samoa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:35:14