Logrotate 命令的10个示例教程

举报
Tiamo_T 发表于 2022/03/11 19:09:56 2022/03/11
【摘要】 有效管理日志文件是 Linux 系统管理员的一项基本任务。

有效管理日志文件是 Linux 系统管理员的一项基本任务。

在本文中,让我们讨论如何使用  logrotate实用程序执行以下日志文​​件操作。

  • 当文件大小达到特定大小时轮换日志文件
  • 轮换旧日志文件后继续将日志信息写入新创建的文件
  • 压缩旋转的日志文件
  • 为旋转的日志文件指定压缩选项
  • 使用文件名中的日期轮换旧日志文件
  • 日志轮换后立即执行自定义 shell 脚本
  • 删除较旧的轮换日志文件


1.Logrotate配置文件

以下是 logrotate 正常工作应注意的关键文件。

/usr/sbin/logrotate – logrotate 命令本身。

/etc/cron.daily/logrotate - 这个 shell 脚本每天执行 logrotate 命令。

$ cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

/etc/logrotate.conf – 所有日志文件的日志轮换配置都在此文件中指定。

$ cat /etc/logrotate.conf
weekly
rotate 4
create
include /etc/logrotate.d
/var/log/wtmp {
    monthly
    minsize 1M
    create 0664 root utmp
    rotate 1
}

/etc/logrotate.d – 在系统上安装单个软件包时,它们会将日志轮换配置信息放在此目录中。例如,yum log rotate的配置信息如下图所示。

$ cat /etc/logrotate.d/yum
/var/log/yum.log {
    missingok
    notifempty
    size 30k
    yearly
    create 0600 root root
}

2. Logrotate size 选项:当文件大小达到特定限制时旋转日志文件

如果您希望每 1KB 轮换一个日志文件(例如,/tmp/output.log),请创建如下所示的 logrotate.conf。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        create 700 bala bala
        rotate 4
}

此 logrotate 配置具有以下三个选项:

  • size 1k – logrotate 仅在文件大小等于(或大于)此大小时运行。
  • create - 旋转原始文件并使用指定的权限、用户和组创建新文件。
  • rotate - 限制日志文件轮换的次数。因此,这将只保留最近的 4 个轮换日志文件。

在 logrotation 之前,以下是 output.log 的大小:

$ ls -l /tmp/output.log
-rw-r--r-- 1 bala bala 25868 2018-06-09 21:19 /tmp/output.log

现在,运行 logrotate 命令,如下所示。选项 -s 指定写入 logrotate 状态的文件名。

$ logrotate -s /var/log/logstatus logrotate.conf

注意:当您需要对某些文件进行日志轮换时,请准备 logrotate 配置并手动运行 logroate 命令。
在 logrotation 之后,以下是 output.log 的大小:

$ ls -l /tmp/output*
-rw-r--r--  1 bala bala 25868 2018-06-09 21:20 output.log.1
-rwx------ 1 bala bala        0 2018-06-09 21:20 output.log

最终,这将继续跟踪旋转日志文件的设置。

  • output.log.4.
  • output.log.3
  • output.log.2
  • output.log.1
  • output.log

请记住,日志轮换后,服务对应的日志文件仍会指向轮换文件(output.log.1)并继续写入。如果要每 5 MB轮换apache access_log 或 error_log ,可以使用上述方法

理想情况下,您应该修改 /etc/logrotate.conf 以指定特定日志文件的 logrotate 信息。

另外,如果你有巨大的日志文件,你可以使用:10 Awesome Examples for Viewing Huge Log Files in Unix

3. logrotate copytruncate选项:轮换旧日志文件后,继续将日志信息写入新创建的文件中。

$ cat logrotate.conf
/tmp/output.log {
         size 1k
         copytruncate
         rotate 4
}

copytruncate 指示 logrotate 创建原始文件的副本(即旋转原始日志文件)并将原始文件截断为零字节大小。这有助于属于该日志文件的相应服务可以写入正确的文件。

在处理日志文件时,您可能会发现sed 替代sed 删除提示很有帮助。

4. Logrotate compress 选项:压缩旋转后的日志文件

如果您使用如下所示的 compress 选项,旋转后的文件将使用 gzip 实用程序进行压缩。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        create 700 bala bala
        rotate 4
        compress
}

压缩日志文件的输出:

$ ls /tmp/output*
output.log.1.gz output.log

5. Logrotate dateext 选项:轮换日志文件名中带有日期的旧日志文件

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        create 700 bala bala
        dateext
        rotate 4
        compress
}

完成上述配置后,您会注意到旋转日志文件中的日期,如下所示。

$ ls -lrt /tmp/output*
-rw-r--r--  1 bala bala 8980 2018-06-09 22:10 output.log-20180609.gz
-rwxrwxrwx 1 bala bala     0 2018-06-09 22:11 output.log

这一天只能工作一次。因为当它尝试在同一天下一次旋转时,较早旋转的文件将具有相同的文件名。因此,在同一天第一次运行后,logrotate 不会成功。

通常,您可以使用 tail -f 实时查看日志文件的输出。您甚至可以组合多个 tail -f 输出并将其显示在单个终端上。

6. Logrotate每月、每天、每周选项:每周/每天/每月轮换日志文件

为了每月轮换一次,

$ cat logrotate.conf
/tmp/output.log {
        monthly
        copytruncate
        rotate 4
        compress
}

如下所示为每周日志轮换添加每周关键字。

$ cat logrotate.conf
/tmp/output.log {
        weekly
        copytruncate
        rotate 4
        compress
}

为每天的日志轮换添加如下所示的 daily 关键字。您还可以每小时轮换一次日志。

$ cat logrotate.conf
/tmp/output.log {
        daily
        copytruncate
        rotate 4
        compress
}

7. Logrotate postrotate endscript 选项:日志轮换后立即运行自定义shell脚本

Logrotate 允许您在完成日志文件轮换后运行自己的自定义 shell 脚本。以下配置表示在logrotation后会执行myscript.sh。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        rotate 4
        compress
        postrotate
               /home/bala/myscript.sh
        endscript
}

8. Logrotate maxage 选项:删除旧的旋转日志文件

Logrotate 会在特定天数后自动删除旋转的文件。以下示例表明轮换的日志文件将在 100 天后被删除。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        rotate 4
        compress
        maxage 100
}

9. Logrotate missingok 选项:如果日志文件丢失不返回错误

当实际文件不可用时,您可以使用此选项忽略错误消息,如下所示。

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        rotate 4
        compress
        missingok
}

10. Logrotate compresscmd 和 compressext 选项:指定日志文件轮换的压缩命令

$ cat logrotate.conf
/tmp/output.log {
        size 1k
        copytruncate
        create
        compress
        compresscmd /bin/bzip2
        compressext .bz2
        rotate 4
}

上面指定了以下压缩选项:

  • compress – 表示应该进行压缩。
  • compresscmd – 指定应该使用什么类型的压缩命令。例如:/bin/bzip2
  • compressext – 指定旋转日志文件的扩展名。如果没有此选项,旋转文件的默认扩展名为 .gz。因此,如果您使用 bzip2 compressioncmd,请将扩展名指定为 .bz2,如上例所示。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。