首页 > 编程笔记 > Linux笔记 阅读:2

Linux logrotate命令的用法(附带实例)

日志轮替本质上是通过 logrotate 命令来执行的,我们也可以手工执行此命令。

logrotate 命令的语法格式如下:
[root@localhost ~]# logrotate [选项] 配置文件名
选项:
执行 logrotate 命令,并查看执行过程:
[root@localhost ~]# logrotate -v /etc/logrotate.conf
# 查看日志轮替的流程
...省略部分输出...
rotating pattern: /var/log/mylog.log weekly (6 rotations)
# 这就是我们自己加入轮替的 /var/log/mylog.log 日志
empty log files are rotated, old logs are removed
considering log /var/log/mylog.log
Creating new state
Now: 2024-03-14 15:43
# 现在的时间
Last rotated at 2024-03-14 15:00
# 上次轮替时间
log does not need rotating (log has already been rotated)
# 时间不够一周,因此不进行日志轮替
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated
# 轮替没有执行,当然在轮替中应执行的命令也没有执行
...省略部分输出...

我们发现,/var/log/mylog.log 日志已加入日志轮替,已经被 logrotate 命令识别并调用了,只是时间没有达到轮替的标准,因此没有进行轮替。那么,强制进行一次日志轮替,查看会有什么结果。
[root@localhost ~]# logrotate -vf /etc/logrotate.conf
# 强制进行日志轮替,不管是否符合轮替条件
...省略部分输出...
rotating pattern: /var/log/mylog.log forced from command line (6 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/mylog.log
Now: 2024-03-14 15:51
# 现在的时间
Last rotated at 2024-03-14 15:51
# 最后一次轮替时间
log needs rotating
# 日志需要轮替
rotating log /var/log/mylog.log, log->rotateCount is 6
dateext suffix '-20240314'
# 提取轮替日期参数
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
set default create context to system_u:object_r:var_log_t:s0
glob finding old rotated logs failed
running prerotate script
# 运行 prerotate 指定的命令
set default create context to system_u:object_r:var_log_t:s0
renaming /var/log/mylog.log to /var/log/mylog.log-20240314
creating new /var/log/mylog.log mode = 0600 uid = 0 gid = 0
running postrotate script
# 运行 postrotate 指定的命令
...省略部分输出...

我们发现,/var/log/mylog.log 日志已经完成了日志轮替。查看新生成的日志和旧日志,具体如下:
[root@localhost ~]# ll /var/log/mylog.log
[root@localhost ~]# ll /var/log/mylog.log*
-rw-------. 1 root root 165 3 月 14 15:51 /var/log/mylog.log
-rw-------. 1 root root 703 3 月 14 15:49 /var/log/mylog.log-20240314
# 旧的日志文件已经轮替

[root@localhost ~]# lsattr /var/log/mylog.log
-------- /var/log/mylog.log
# 新的日志文件被自动添加了 chattr 的 a 属性
logrotate 命令在使用 -f 选项之后,就会不管日志是否符合轮替条件,而强制把所有的日志都进行轮替。

相关文章