日志轮转是Linux系统上非常常用的功能。它保留了系统监控和故障排除所必需的日志内容,同时防止日志过多导致日志单一。文件太大。日志滚动的过程如下:在一组日志文件中,删除编号最大(oldest)的日志文件,其余日志文件的编号依次递增并替换较旧的日志文件,同时旧的将被删除。然后新文件将其替换为当前日志文件。这个过程可以很容易地实现自动化,并且可以根据需要微调细节。可以使用logrotate命令手动执行日志轮转。本文将介绍手动日志滚动的方法和预期结果。本文中的示例适用于Ubuntu等Linux系统。对于其他类型的系统,日志文件和配置文件可能不同,但是日志滚动的过程是类似的。为什么需要轮换日志通常,不需要手动轮换日志文件。Linux系统每隔一天(或更长的时间间隔)或根据日志文件的大小自动执行日志回滚。如果您需要滚动日志以释放存储空间,或者从当前活动中拆分一部分日志,这很容易做到,具体取决于文件滚动规则。背景介绍Linux系统安装后,很多日志文件都被纳入了日志滚动的范围。此外,一些应用程序还为它们在安装时生成的日志文件设置了滚动规则。一般日志轮转的配置文件放在/etc/logrotate.d中。如果想了解日志滚动的详细实现,可以参考这篇之前的文章。在日志回滚期间,活动日志被赋予一个新名称,例如log.1,之前名为log.1的文件被重命名为log.2,等等。在这组文件中,最旧的日志文件(比如名为log.7)从系统中删除。日志轮转时,文件命名方式和保留的日志文件数量由/etc/logrotate.conf中的配置文件决定。文件的翻转次数为7次或更多。例如,日志滚动后的系统日志可能如下所示(请注意,该行末尾的注释部分仅显示滚动过程如何影响文件名):$ls-l/var/log/syslog*-rw-r-----1syslogadm128674Mar1008:00/var/log/syslog<==new-file-rw-r-----1syslogadm2405968Mar916:09/var/log/syslog.1<==之前的syslog-rw-r-----1syslogadm206451Mar900:00/var/log/syslog.2.gz<==之前的syslog.1-rw-r-----1syslogadm216852Mar800:00/var/log/syslog.3.gz<==previoussyslog.2.gz-rw-r-----1syslogadm212889Mar700:00/var/log/syslog.4.gz<==先前的syslog.3.gz-rw-r-----1syslogadm219106Mar600:00/var/log/syslog.5.gz<==先前的syslog.4。gz-rw-r-----1syslogadm218596Mar500:00/var/log/syslog.6.gz<==previoussyslog.5.gz-rw-r-----1syslogadm211074Mar400:00/var/log/syslog.7.gz<==在syslog.6.gz之前你可能会发现,除了当前活跃的日志和最新的日志文件rolled之外,其余的文件有被压缩以节省存储空间。这样设计的原因是大多数系统管理员只需要查阅最新的日志文件。其余的日志文件都是压缩过的,需要的时候可以解压查看。这是一个很好的妥协。手动日志轮转可以执行logrotate命令进行手动日志轮转:$sudologrotate-f/etc/logrotate.d/rsyslog值得一提的是,logrotate命令使用/etc/logrotate.d/rsyslog配置文件,通过-f参数用于实现“强制滚动”。因此,整个过程将是:删除syslog.7.gz,将原来的syslog.6.gz重命名为syslog.7.gz,将原来的syslog.5.gz重命名为syslog.6.gz,将原来的syslog重命名。4.gz命名为syslog.5.gz,原来的syslog.3.gz命名为syslog.4.gz,原来的syslog.2.gz命名为syslog.3.gz,原来的syslog。1.gz命名为syslog.2.gz,但不一定要创建新的syslog文件。您可以按照以下命令确保文件具有正确的所有权和权限:$sudotouch/var/log/syslog$sudochownsyslog:adm/var/log/syslog$sudochmod640/var/log/syslog你也可以在/etc/logrotate.d/rsyslog中加入如下一行,logrotate会帮你完成以上三个命令的运行:create0640syslogadm整个配置文件内容如下:/var/log/syslog{rotate7dailymissingoknotifemptycreate0640syslogadm<==delaycompresscompresspostrotate/usr/lib/rsyslog/rsyslog-rotateendscript}下面是一个手动旋转记录用户登录信息的wtmp日志的例子。由于/etc/logrotate.d/wtmp中rotate2的配置,系统中只保留了两个wtmp日志文件。滚动前:$ls-lwtmp*-rw-r-----1rootutmp1152Mar1211:49wtmp-rw-r-----1rootutmp768Mar1117:04wtmp.1execute滚动命令:$sudologrotate-f/etc/logrotate.d/wtmp滚动后:$ls-l/var/log/wtmp*-rw-r-----1rootutmp0Mar1211:52/var/log/wtmp-rw-r-----1rootutmp1152Mar1211:49/var/log/wtmp.1-rw-r-----1rootadm99726Feb2107:46/var/log/wtmp.report需要知道的是,无论日志回滚是自动发生还是手动发生,logrorate状态文件中都会记录最新的回滚时间。$grepwtmp/var/lib/logrotate/status"/var/log/wtmp"2020-3-12-11:52:57
