问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

ubuntu20使用logrotate截取日志无效,该怎么解决?

提问网友 发布时间:2025-03-15 15:00
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2025-03-24 03:10
在解决问题之前先来了解几个相关概念(可以跳过):
rsyslog: 是一款用于系统日志处理的开源工具,具有模块化架构、强大的过滤和远程日志记录功能,支持 TCP 和 UDP,提供高性能的日志处理和灵活的输出插件。
cron: 是一个定时任务调度工具,允许用户在预定的时间间隔内自动执行命令或脚本,通过 crontab 文件管理任务列表,能够按照规定的时间或频率来执行定时任务。
logrotate: 是一个用于管理日志文件的工具,包括但不限于对系统生成的日志文件进行分片,定期轮转等,防止日志文件等占用过多存储空间。
三者之间的关系:
有了他们三者之间的概念之后接下来咱们步入正题。
解决办法1. 配置logrotate:
logrotate的配置分为两级:全局-->局部,全局配置也就是默认配置,如果不在局部配置中覆盖那么就会执行全局配置。查看默认配置文件cat /etc/logrotate.conf:
以下是上述每个配置指令含义的描述(以#开头的行表示注释):
weekly: 表示日志轮换的频率。或者,您可以指定另一个时间间隔(hourly、daily、monthly或yearly)。由于该logrotate实用程序通常每天运行一次,因此如果旋转频率比daily所需的更短,您可能需要更改此配置。
su root adm: 日志轮换是使用 root 用户和 admin 组执行的。通过使用此指令,您可以确保轮换的日志文件由特定用户和组拥有,这对于访问控制和权限管理非常有用。当日志文件需要由具有适当权限的特定用户或组访问或管理时,这一点尤其重要。
rotate 4: 日志文件在删除旧文件之前会轮换四次。如果 rotate设置为零,则旧版本将立即删除并且不会轮换。如果设置为-1,则较旧的日志根本不会被删除,除非受 影响maxage。
create: 轮换后立即创建一个与刚刚轮换的同名的新日志文件。
dateext: 如果启用此选项,将通过在文件名中附加日期来重命名已轮换的日志文件,以便根据轮换日期更好地组织和区分日志文件(特别是当轮换频率为 或daily更高时)。旋转文件的默认方案是logname.1、logname.2等,但启用此选项会将其更改为logname.YYYYMMDD. dateformat您可以通过和指令更改日期格式 dateyesterday。
compress: 此规则确定是否应压缩旧日志文件(默认使用 gzip)。日志压缩默认处于关闭状态,但您可以启用它以节省磁盘空间。
include: 该指令用于包含其他配置文件或片段。它允许您通过将 Logrotate 配置拆分为多个文件来模块化和组织它。此时,该/etc/logrotate.d目录下的文件就已经包含在配置中了。
如前所述,该/etc/logrotate.conf文件充当 Logrotate 的全局配置文件,为整个系统的日志轮转提供默认设置和选项。它为日志轮换奠定了基础,但可以通过/etc/logrotate.d/ 目录中的配置文件进行扩展或覆盖,这些配置文件通常为特定应用程序日志配置轮换策略。
局部配置文件在/etc/lorotate.d/文件夹下面,如下所示:
以rsyslog为例,其内容为:
上面的配置指定了位于目录/var/log/中的多个日志文件的轮换规则。除了我们在上一节中检查的指令之外,它还包括以下指令:
missingok: 如果缺少任何指定的日志文件,则继续日志轮换而不报告任何错误。
notifempty: 确保日志文件为空时不会轮换。如果日志文件为空,则不会触发轮换。
delaycompress: 将轮换日志文件的压缩延迟到下一个轮换周期。这允许在压缩之前分析先前的日志文件。
sharedscript sprerotate:确保或指令中指定的命令或脚本 postrotate仅执行一次,无论轮换的日志文件数量如何。默认情况下,logrotate为每个正在轮换的日志文件单独执行命令/脚本。
postrotate和endscript: 包含日志轮换后要执行的命令或脚本。在这种情况下,/usr/lib/rsyslog/rsyslog-rotate脚本在成功轮换后执行。它将SIGHUP信号发送到 Rsyslog 服务,以便它可以关闭并重新打开日志文件进行写入。
总体而言,此配置可确保指定的日志文件每周轮换、压缩并限制为最大4轮换日志文件数。它还包括用于处理丢失或空日志文件的附加指令,并执行特定于 Rsyslog 的后轮换脚本。
其他需要注意的有用指令包括:
size:指定日志文件在启动轮换之前可以达到的最大大小(以字节、千字节、兆字节或千兆字节为单位)。如果在size指令之后指定了hourly等周期指令 ,这会导致默认计划被忽略周期。
minsize:日志文件按照指定的时间表轮换,但不会在达到指定的大小之前轮换。因此,当minsize使用 时,会同时考虑文件大小和时间戳来确定是否应轮换文件。
maxsize:指定一旦日志文件超过规定的文件大小,即使尚未达到时间间隔,也会轮换日志文件。
Logrotate提供了两个指令来指定如何处理日志轮换:create和copytruncate。前者是默认值,其工作原理是将日志文件重命名为*.log.1,然后创建新*.log文件以继续记录日志。
copytruncate模式下,*.log文件被复制到新的*.log.1文件,然后清空(截断)原始文件,允许应用程序继续写入它,就像它是一个新文件一样。如果您的应用程序或进程无法通过在轮换后自动切换到新日志文件来优雅地处理日志文件轮换,则此模式非常有用。
其他详细的配置可以查看这篇博客: A Complete Guide to Managing Log Files with Logrotate
解决办法2. logrotate配置测试:
使用sudo logrotate -vf /etc/logrotate.d/rsyslog命令执行默认的配置文件,可能会报下面的错误:
修改默认配置文件为:
这里我们将检测方式设置为根据文件大小进行分片,如果想要按照周期比如hourly等,也可以在这里修改。建议自动触发测试通过之后再修改。
使用命令sudo logrotate -vf /etc/logrotate.d/rsyslog对刚配置好的文件进行测试,结果如下:
测试结果没有错误,说明配置正确。我们再看一看日志的变化:
分片前:
分片后:
可以发现成功分出了syslog.1文件。多执行几次之后可以发现syslog.* 文件最多有4个,与我们配置文件中设置的是一样的,到这里logrotate部分就配置好了。
解决办法3. cron配置:
我们先查看crontab中的内容cat /etc/crontab:
cron服务启动之后会每分钟查询一次/etc/crontab文件和/etc/crontab.d/目录下的所有文件,按照其中的规则去执行相应的命令,如果用户使用cron -e命令创建了新的规则,cron也会去运行用户定义的触发任务。
解决办法3.1 按大小分片:
如果我们在logrotate的配置中使用了如size 2k这样的规则,那么周期规则如daily等就会被覆盖,因此我们需要自己写一个触发任务,如下所示:
添加一条触发任务:
设置完毕,现在就可以用ll -h /var/log查看日志的变化情况了,看到分片成功那么再去修改合适的size以及触发时间。
解决办法3.2 按周期分片:
如果在logrotate配置文件中用的是maxsize/minsize搭配hourly/daily等,不需要再额外设置触发任务。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

利用logrotate对MySQL日志进行轮转 logrotate补充说明 nginx内置日志切割实战 猕猴桃为什么能治疗口腔溃疡 电脑微信怎么导出聊天记录怎样将电脑微信里面所有的聊天记录导出来 阿胶不能和骨头一起吃吗 车右前方单行线上被逆行电动车蹭掉皮了,修修多少钱大约? 骨折了吃什么好的最快 ? (补品) 骨折后多久才能吃阿胶膏 出了交通事故,2千多的新电动车被撞坏,肇事方只愿意赔1千块怎么办_百度... 日行灯一直亮着,关不掉的解决办法是什么 日行灯一直亮着,关不掉朗逸 蹭到电动车漆一般赔多少 ...每当渲染到30%的时候就会出现“影片编译错误”请问是什么情况... pr编译影片时出错gpu渲染错误无法处理帧 汽车生产管理有哪些流程? 选哪种信用卡好 vivo手机耳机插孔在哪里 靶向基因检测 ...去世后其父亲出去做了上门女婿后车祸身亡赔偿金女儿能得到吗... 23周四维男孩会翻盘吗 卖方未按时支付货款利息该如何计算 货款赔偿算利息么 买卖合同中拖欠贷款可以主张利息吗 宁夏取暖费补贴标准 科创板50只成分股有哪些 科创50指数调整什么意思 科创50股名单 科创50有什么股票 【同义词辨析】leave、abandon、desert 和 forsake abandon与desert的区别是什么? 什么疾病能引起山羊眼瞎 灭火器多久点检 狗狗瞳孔晶体发白,你需要知道的三个问题 我有微信公众号,可是不知道怎么在上面卖东西,请大师详细指点一下_百度... “采取”和“采用”的用法有什么不同呢? take responsibility后面接什么 commit to doing的用法是什么? Win7系统如何快速设置共享打印机并实现网络打印 电脑win7怎么共享打印机电脑共享设置方法 windows7系统怎样启用smb共享?
Top